ajaxFileUpload帶參數提交(親測可用)


使用ajaxFileUpload上傳文件時,有時需要帶參數提交,網上有很多資料說使用data,但其實要使用data帶參數是需要修改的,否則后台是獲取不到的.

分析原因:

ajaxFileUpload為了實現無刷新異步提交文件,構建 iframe 然后創建form表單 再將要上傳的文件寫上去再提交.但是原代碼 卻沒有處理data.所以這塊內容需要我們自己加上去.

下面紅色部分為修改ajaxFileUpload.js的三處地方:

備注:好像csdn代碼中加顏色加粗  有問題這三處修改的地方我直接貼出來,位置看下面的代碼,

①createUploadForm: function(id, fileElementId,data);

②jQuery(form).appendTo('body')的前面修改:
if (data) { for (var i in data) { $('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form); } } 

③var form = jQuery.createUploadForm(id, s.fileElementId,s.data);

 

ajaxFileUpload為了實現無刷新異步提交文件,構建 iframe 然后創建form表單 再將要上傳的文件寫上去再提交.但是原代碼 卻沒有處理data.所以這塊內容需要我們自己加上去.
下面紅色部分為修改ajaxFileUpload.js的三處地方:
備注:好像csdn代碼中加顏色加粗  有問題這三處修改的地方我直接貼出來,位置看下面的代碼,
createUploadForm: function(id, fileElementId,data);

if (data) { 
        for (var i in data) { 
            $('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);
        } 
    }


var form = jQuery.createUploadForm(id, s.fileElementId,s.data);
ajaxfileupload js

如何使用它呢?

$.ajaxFileUpload({
                    url: 'http://localhost:8080/HNUST/crawler/ordinary2', 
                    type: 'post',
                    data : {
                        url : url,
                        keyword : keyword,
                        rule : rule,
                        data : data,
                        sign:sign
                    },
                    secureuri: false, //一般設置為false
                    fileElementId: 'file', // 上傳文件的id、name屬性名
                    dataType: 'JSON', //返回值類型,一般設置為json、application/json  這里要用大寫  不然會取不到返回的數據
                    success: function(data, status){  
                        alert(data);
                    },
                    error: function(data, status, e){ 
                        alert(e);
                    }
                }); 

html:

<input type="file" id="file" name="file">

java后台接收參數  獲取參數不能按照request.getParameter的方式,上傳文件后台有兩種方式(據我所知,歡迎拍磚),一種是是通過Servlet的方式,利用ServletFileUpload獲取,FileItem集合,通過便利獲取FileItem得到參數,不推薦

FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
    
List<FileItem> fileItems = servletFileUpload.parseRequest(request);

第二種方式,是通過spring mvc上傳文件的方式,通過MultipartFile file,直接接收文件,需要配置

<bean id="multipartResolver"    
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    
        <!-- 默認編碼 -->  
        <property name="defaultEncoding" value="utf-8" />    
        <!-- 文件大小最大值 -->  
        <property name="maxUploadSize" value="10485760000" />    
        <!-- 內存中的最大值 -->  
        <property name="maxInMemorySize" value="40960" />    
    </bean>  

詳細可以參考spring mvc 文件上傳參數,通過該種方式可以通過request.getParameter獲取參數

使用過程中有兩點需要注意的地方:

其一,dataType必須要大寫;

其二:在data的值要寫成json的格式,否則后台無法接受參數

最后感謝@8英里的提示,讓我修正之前的錯誤,避免給其他人代碼不變。

參考網站:

http://blog.csdn.net/u013243986/article/details/51497057

http://blog.csdn.net/cheung1021/article/details/7084673/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM