1. 程式人生 > >百度上傳元件:webuploader

百度上傳元件:webuploader

百度圖片上傳元件:

頁面:

<div class="upload">
<section>
<article>
<div class="wu-example">
<div id="fileList" class="uploader-list"></div>
      <span id="picker">上傳出生證明</span>
</div>
       <div id="thumb"></div>
</article>
<div class="load" id="loading1" style="display: none"></div>
</section>


</div>

JS

坑1:路徑

坑2:IOS和安卓不同,導致呼叫方式改變

$(document).ready(function(){
 	var serverUrl ;//預設值

 	var environment = "ceshi";//xiangshang,ceshi ,bendi
 	var baseurl = '<%=basepath%>';
// 	 	alert(baseurl);
	var u = navigator.userAgent;
	if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) {//安卓手機
//			alert("安卓手機");
			if(environment=="xiangshang"){
				serverUrl = "/hd/6/updateHeadImgNew";//線上環境(hd是線上做了nginx路徑對映)
			}else if(environment=="ceshi"){
				serverUrl = "/6/updateHeadImgNew";//測試環境
			}else if(environment=="bendi"){
				serverUrl = baseurl+"/6/updateHeadImgNew";//本地環境
			}
	} else if (u.indexOf('iPhone') > -1) {//蘋果手機
// 			alert("蘋果手機");
			if(environment=="xiangshang"){
				serverUrl = "/hd/6/updateHeadImg";//線上環境(hd是線上做了nginx路徑對映)
			}else if(environment=="ceshi"){
				serverUrl = "/6/updateHeadImg";//測試環境
			}else if(environment=="bendi"){
				serverUrl = baseurl+"/6/updateHeadImg";//本地環境
			}
	} else if (u.indexOf('Windows Phone') > -1) {//winphone手機
//			alert("winphone手機");
		if(environment=="xiangshang"){
			serverUrl = "/hd/6/updateHeadImg";//線上環境(hd是線上做了nginx路徑對映)
		}else if(environment=="ceshi"){
			serverUrl = "/6/updateHeadImg";//測試環境
		}else if(environment=="bendi"){
			serverUrl = baseurl+"/6/updateHeadImg";//本地環境
		}
	}else{
// 			alert("其他");
		if(environment=="xiangshang"){
			serverUrl = "/hd/6/updateHeadImg";//線上環境(hd是線上做了nginx路徑對映)
		}else if(environment=="ceshi"){
			serverUrl = "/6/updateHeadImg";//測試環境
		}else if(environment=="bendi"){
			serverUrl = baseurl+"/6/updateHeadImg";//本地環境
		}
	}
	
// 		alert(serverUrl);
	
	var uploader = WebUploader.create({
	    // swf檔案路徑
	    swf: 'webuploader/Uploader.swf',
	    auto: true,
	    // 檔案接收服務端。
	    server: serverUrl,//本地測試地址
	    
// 	    server: '/hd/6/updateHeadImgNew',//線上地址
	    
	    
	    fileVal :'image',
	    
	    //縮圖
	    thumb:{
	        width: 100,
	        height: 100,
	
	        // 圖片質量,只有type為`image/jpeg`的時候才有效。
	        quality: 70,
	
	        // 是否允許放大,如果想要生成小圖的時候不失真,此選項應該設定為false.
	        allowMagnify: false,
	
	        // 是否允許裁剪。
	        crop: true,
	
	        // 為空的話則保留原有圖片格式。
	        // 否則強制轉換成指定的型別。
	        type: 'image/jpeg'
	    },
	    
	    
	    compress:{
	        width: 1000,
	        height: 1000,
	
	        // 圖片質量,只有type為`image/jpeg`的時候才有效。
	        quality: 90,
	
	        // 是否允許放大,如果想要生成小圖的時候不失真,此選項應該設定為false.
	        allowMagnify: false,
	
	        // 是否允許裁剪。
	        crop: false,
	
	        // 是否保留頭部meta資訊。
	        preserveHeaders: true,
	
	        // 如果發現壓縮後文件大小比原來還大,則使用原來圖片
	        // 此屬性可能會影響圖片自動糾正功能
	        noCompressIfLarger: false,
	
	        // 單位位元組,如果圖片大小小於此值,不會採用壓縮。
	        compressSize: 0
	    },
	
	    // 選擇檔案的按鈕。可選。
	    // 內部根據當前執行是建立,可能是input元素,也可能是flash.
	    pick: '#picker',
	
	    // 不壓縮image, 預設如果是jpeg,檔案上傳前會壓縮一把再上傳!
	    resize: true,
	    
	    //目前移動端有幾個重要的 bug 在此列出來以免大家踩坑。
	    
		/*
		上傳請求內容為空,這是 android 4 的一個bug,只要 file 的 blob資料修改過,通過 xhr2 去傳送就有這個問題。 詳情:https://code.google.com/p/android/issues/detail?id=39882
		
		解決方案: 傳送的時候採用二進位制方案,即 把 sendAsBinary 設定成true, 通過這種方式可以避免這個問題。後端接受需要小改動一下。
		*/
	    
	    sendAsBinary:true,
	    
	    fileNumLimit:1,
	    // 只允許選擇圖片檔案。
	    accept: {
	        title: 'Images',
	        extensions: 'gif,jpg,jpeg,bmp,png',
	        mimeTypes: 'image/*'
	    }
	    
	});
	uploader.on( 'fileQueued', function( file ) {
	    uploader.makeThumb( file, function( error, ret ) {
	        if ( error ) {
	            $li.text('預覽錯誤');
	        } else {
		        $("#picker").first("div").html("");
	        	$("#thumb").html('<img alt="" src="' + ret + '" />');
	        	$("#loading1").show();
	        }
	    });
	});
	uploader.on( 'uploadSuccess', function( file,result ) {
	 	$( '#'+file.id ).addClass('upload-state-done');
		var	 qiuniuurl1 = result.data.usIco;
		$("#pichidden_1").val(qiuniuurl1);
		$("#loading1").hide();
		
	});
});

伺服器程式:

IOS呼叫

@RequestMapping("/updateHeadImg")
	@ResponseBody
	public ApiResult updateHeadImg(String name) {
		ApiResult apiResult = new ApiResult();


		byte[] imageByte = null;

		try {
			InputStream inputStream = getRequest().getInputStream();
			imageByte = org.apache.commons.io.IOUtils.toByteArray(inputStream);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// 上傳檔案
		if (imageByte.length>0) {

			String filename = UUIDUtil.getUUID() + name;

			String key ="";
			if (upurl != null) {
				Date date = new Date();
				SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMdd");
				String dateUrl = sdf.format(date);
				key = upurl + dateUrl + "/" + filename;
			}
//				byte[]  imageByte = this.cropBytes(image.getInputStream(), 420);
				System.out.println("key------------------------"+key);
				boolean flag = QiniuUtil.IVYBABY.uploadFile(key, imageByte);
				System.out.println("flag:----------------"+flag);
				
				
				System.out.println("上傳七牛:" + flag);
			apiResult.getData().put("usIco",BASE_QN_URL+key+"?imageView2/1/w/420");
		} else {
			
			
			
			
			apiResult.setMsg("圖片不能為空");
		}
		System.out.println(JSON.toJSONString(apiResult));
		
		return apiResult;
	}

安卓呼叫:
@RequestMapping("/updateHeadImgNew")
	@ResponseBody
	public ApiResult updateHeadImgNew() {
		ApiResult apiResult = new ApiResult();
		String imgUrl = "";
		InputStream inputStream = null;
		String bendiPic = "";
		try {
			inputStream = getRequest().getInputStream();
			//當前日期
			Date date = new Date();
			SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMdd");
			String dateUrl = sdf.format(date);
			String path="/static/imgtest/"+dateUrl;//線上路徑
			
//			String path="D://imgtest/"+dateUrl;//測試
			
			//建立資料夾
			File f = new File(path);
			if(!f.exists())
				f.mkdirs(); 
			//上傳圖片到本地
			bendiPic = path+"/"+UUIDUtil.getUUID()+".png";//線上地址
			System.out.println("bendiPic:"+bendiPic);
			//裁切,並儲存本地
			ImageUtil.crop(inputStream, 420, bendiPic);
			System.out.println("-----------本地儲存路徑:-----------"+bendiPic);
			
			
			
			//準備key
			String filename = UUIDUtil.getUUID() + ".png";
			String key = upurl + dateUrl + "/" + filename;
			
			//上傳七牛
			boolean flag = QiniuUtil.IVYBABY.uploadFile(key, bendiPic);
			//如果上傳七牛失敗,則返回本地路徑
			if(flag){
				imgUrl = BASE_QN_URL+key+"?imageView2/1/w/420";
			}else{
				//這裡做的檔案對映,用域名對映上面的真是路徑/static/imgtest/xxxxx.png
				imgUrl = "static.ivybaby.me/imgtest/"+bendiPic;
			}
			apiResult.getData().put("usIco",imgUrl);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			apiResult.setMsg("圖片不能為空");
			e.printStackTrace();
		}
		
		System.out.println("--------------imageUrl--------------【"+imgUrl+"】");
		return apiResult;
	}