spring boot-文件上传

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测试:

原文地址:https://www.cnblogs.com/lijianda/p/11672093.html