pom.xml添加依赖:
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> </dependency>
代码实现:
//这样配置会导致上传几十K的小文件接收不到,uploadFiles无接收文件 /*@Bean(name = "multipartResolver") public MultipartResolver multipartResolver(){ CommonsMultipartResolver resolver = new CommonsMultipartResolver(); resolver.setDefaultEncoding("UTF-8"); //resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常 resolver.setResolveLazily(true); resolver.setMaxInMemorySize(40960); //上传文件大小 50M 50*1024*1024 resolver.setMaxUploadSize(10000*1024*1024); return resolver; }*/ /** * 多文件上传 * @return */ @RequestMapping(value = "/uploadFile",method = RequestMethod.POST) @ResponseBody public ReturnResponData UploadFile(@RequestParam(value="uploadFiles") MultipartFile[] uploadFiles, HttpServletRequest request){ ReturnResponData retData = new ReturnResponData(ReturnResponData.FAILED,"上传失败"); String ipsStr = request.getParameter("ips"); String[] ips = new String[0]; if (ipsStr != null && !ipsStr.isEmpty()) { ips = ipsStr.split(","); } if (ips.length == 0 || uploadFiles == null || uploadFiles.length == 0){ return retData; } //初始化通用multipart解析器 CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); //判断请求中是否有文件上传 if (!multipartResolver.isMultipart(request)){ return retData; } for (MultipartFile uploadFile : uploadFiles) { String fileName = uploadFile.getOriginalFilename(); byte[] bytes = null; InputStream inputStream = null; try { if (!isThread){ inputStream = uploadFile.getInputStream(); bytes = new byte[inputStream.available()]; inputStream.read(bytes); //mapUploadFiles.put(fileName,bytes); } } catch (IOException e) { logger.error("read file["+fileName+"] error:"+e.toString()); } finally { if (inputStream != null){ try { inputStream.close(); } catch (IOException e) { logger.error("close is error:"+e.toString()); } } } MediaType contentType = MediaType.IMAGE_JPEG; String url = "http://" + ip + ".....; //result = HttpRequestResources.RestTemplate(url,bytes, HttpMethod.PUT,contentType,userName,password); String result; if (isThread && mapUploadFiles.get(fileName) != null) { //第一遍上传成功后临时文件不存在,使用临时存储的流 result = HttpRequestResources.HttpClientRequest_UploadFile(url,mapUploadFiles.get(fileName), HttpMethod.PUT,contentType,userName,password,ip,new Header[]{},0); } else { result = HttpRequestResources.HttpClientRequest_UploadFile(url,bytes, HttpMethod.PUT,contentType,userName,password,ip,new Header[]{},0); } JSONObject jsonObject = Result2JSON(result,fileName,ip); if (jsonObject.getString("status").equals("0")){ sArray.add(jsonObject); }else { fArray.add(jsonObject); } } if (jObject.getJSONArray("failed").size() == 0){ retData.setCode(ReturnResponData.SUCCESSED); retData.setMsg("成功"); } retData.setData(jObject); return retData; }
解决方法:
package com.hikvision.module.files.controller; import org.springframework.boot.web.servlet.MultipartConfigFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.servlet.MultipartConfigElement; @Configuration public class MultipartConfig { /** * 配置文件上传大小 */ @Bean public MultipartConfigElement multipartConfigElement(){ MultipartConfigFactory factory = new MultipartConfigFactory(); // 单个数据大小 factory.setMaxFileSize("1024MB"); /// 总上传数据大小 factory.setMaxRequestSize("1024MB"); return factory.createMultipartConfig(); } }
Fiddler测试: