1、獲取到文件流,原始方法想通過json格式化后,在后台將文件流,相關參數一起注入bean中取出,請求不成功,錯誤原因:文件流經過序列化后變為空對象
2、使用單獨的ajax請求將文件流通過FormData處理送入后台,后台以帶參的方式獲取,不成功,原因:項目時基於maven,springmvc,mybatis,沒有做相應的配置,請求錯誤400
詳細配置:
(1)添加依賴
<!-- 添加依賴包,才可以上傳文件,否則請求400 --> <dependencies> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <!-- 添加依賴包,才可以上傳文件,否則請求400 end-->
(2)項目配置
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 上傳文件大小上限,單位為字節(10MB) --> <property name="maxUploadSize"> <value>10485760</value> </property> <!-- 請求的編碼格式,必須和jSP的pageEncoding屬性一致,以便正確讀取表單的內容,默認為ISO-8859-1 --> <property name="defaultEncoding"> <value>UTF-8</value> </property> </bean>
(3) jsp頁面,相關參數在配置中介紹
<body > <input type="file" id="image" name="image" multiple/> <button id="su" onclick="upLoad()">提交</button> </body> <script type="text/javascript"> function upLoad(){ //使用以下方式需要引入jQuery相關依賴,也可以選擇使用document操作 var file = $("#image")[0].files[0]; //打印file 為對象 console.log(file); var formObj = new FormData(); //將文件流使用FormData對象處理其中image是后台取值需要 formObj.set('image', file); $.ajax({ url:'${APP_PATH }/test33', data:formObj, type: 'POST', dataType:'json', processData:false,//必須false contentType:false,//必須false success:function(data){ alert(data.Msg); } }); } </script> </html>
(4)后台java代碼
@RequestMapping("/test33") public void test3( @RequestParam("image") MultipartFile uploadFile) throws IOException{ if(uploadFile!=null){ System.out.println(uploadFile.getSize()+" 2:"+uploadFile.getSize()); byte[] by=uploadFile.getBytes(); for(int i=0;i<by.length;i++){ System.out.print(by[i]); } }else{ System.out.println("uploadFile=null"); } }