1、获取到文件流,原始方法想通过json格式化后,在后台将文件流,相关参数一起注入bean中取出,请求不成功,错误原因:文件流经过序列化后变为空对象 2、使用单独的ajax请求将文件
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"); } }