web uploader 框架上傳圖片,java後臺處理

前言:最近剛剛接觸到微信端的開發,使用到了web uploader 框架作爲上傳組件,初步接觸,走進了很多坑,在不斷的試驗,查文檔基礎上終於解決了這個問題。再次記錄,希望能夠使其他使用此框架上傳圖片的初學者少走彎路。
目錄:
1.web uploader前臺代碼實現
2.Java後臺接收處理
3.前臺圖片回顯(多張圖片上傳)

.前臺代碼:web uploader

1.前臺js,需要注意 上傳方式一定要設置成 sendAsBinary: true 。用火狐瀏覽器調試時,可以看到設置後上傳content-type 爲image類型。(這裏只是代碼片段,需要注意的地方,並不完全)

        /*圖片上傳*/
        jQuery(function() {
            var $ = jQuery,
                    $list = $('#fileList'),
            // 優化retina, 在retina下這個值是2
                    ratio = window.devicePixelRatio || 1,
            // 縮略圖大小
                    thumbnailWidth = 100 * ratio,
                    thumbnailHeight = 100 * ratio,
            // Web Uploader實例
                    uploader;
            // 初始化Web Uploader
            uploader = WebUploader.create({
                // 自動上傳。
                auto: true,

                // 文件接收服務端。
                server: '/uploadPic',// 此處服務器測試時可以寫本地服務,上傳的Java後臺請求地址
                sendAsBinary: true,// 上傳方式

                pick : {
                    id : '.filePicker',
                    //只能選擇一個文件上傳
                    multiple: false
                    
                },
                duplicate:true,//可以重複
                resize : true,// 不壓縮image, 默認如果是jpeg,文件上傳前會壓縮一把再上傳!
                // 只允許選擇文件,可選。
                accept: {
                    title: 'Images',
                    extensions: 'gif,jpg,png,jpeg',
                    mimeTypes: 'image/*'
                },
            })
        });

二.Java後臺接受處理

@RequestMapping(value = "/uploadPic", method = RequestMethod.POST)
	public void uploadPic(HttpServletRequest request, HttpServletResponse response) throws Exception {
		String name = request.getParameter("name");// 文件名稱
		String type = name.substring(name.lastIndexOf(".") + 1);// 文件類型
		name = DateTools.getDateAndTime() + "." + type;// 重新定義圖片名稱,DateTools.getDateAndTime() 工具類,產生時間戳短碼,可以自己根據需求重新定義 
		
		String path ="xxx";//這裏保存圖片路徑 D:\ 這樣
		path = path + File.separator + name;// 拼接路徑
		ServletInputStream inputStream = request.getInputStream();// ***獲取字節流,圖片保存在這裏,切記這裏只可以獲取一次。***
		File uploadFile = new File(path);// 路徑文件,一定要有文件夾,沒有則創建,mkdir
		FileCopyUtils.copy(inputStream, new FileOutputStream(uploadFile));// 複製圖片
		inputStream.close();// 關閉io,這裏寫的簡陋了些,代碼從簡

		String realPath= uploadFile.getPath();//realPath 爲圖片真路徑
		// 格式 : http://192.1.1.1/xxxx/name 類似這樣在公網顯示
		JSONObject json = new JSONObject();
		json.put("path", realPath);// 引用路徑
		json.put("flag", "success");// 標識
		response(response, json.toJSONString());// 保存圖片完成,返回前臺進行回顯
	}

三…前臺圖片回顯(多張圖片上傳)

這裏是我的前臺html代碼,需要注意的是div嵌套的的排序格式。

<div class="pro-upload s">
 <div class="pro-uploads">
	 <img id="img5" src="xxx/images/pro_img_07_07.png"><!-- 初始引用圖片路徑 -->
	 <a href="javascript:void(0);" class="btn-tu filePicker btn_cl webuploader-container" imagetype="5">
		 <div class="webuploader-pick"></div>
		 <div style="top: 0px; left: 0px; width: 100%; height: 100px; overflow: hidden;">
			 <input type="hidden" name="lgback_picpath" id="lgback_picpath"/>
			 <input type="file" name="lgback_picpath_n" id="lgback_picpath_n" class="webuploader-element-invisible" accept="image/*">
			 <label style="opacity: 0; width: 100%; height: 100%; display: block; cursor: pointer; background: rgb(255, 255, 255);"></label>
		 </div>
	 </a>
	 <span id="close5" class="colse_cl" style="display:none;"><img src="${preserverStyleServierPath}/images/cose1.png"></span>
 </div>
 <div class="frm-txt-center" name="lgback_name">測試圖片05</div>
</div>

webuploader 代碼,可以根據var uploaderId = ‘rt_’+file.source.ruid; 這種方式獲取當前上傳div的id,用chrom可以發現,當圖片上傳時頁面會浮動出一個臨時div而這種獲取id 的方式就是獲取臨時div 的id,再根據臨時div 的id定位到html頁面原本的div 確定回顯未知,img類型,將傳回來的路徑傳入img即可。

uploader.on( 'uploadSuccess', function( file,str ) {
mui.alert("上傳成功","提示信息","確定");

var uploaderId = 'rt_'+file.source.ruid;// 獲取當前節點id
var $this = $("#"+uploaderId).parent();// 獲取當前節點父類節點 a標籤
var par = $this.parent();// 獲取當前節點祖父節點 div
par.find("img:first").attr("src",str.path);// 獲取祖父節點下第一個img標籤,並賦值
par.find("a:first").find("div:first").find("div:last").find("input:first").attr("value",str.pathPic);// 這裏是將保存在數據庫中的路徑寫入input中 pathPic 是存在數據庫中的格式,這裏的Java代碼我沒有寫出
});
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章