zoukankan      html  css  js  c++  java
  • 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测试:

  • 相关阅读:
    弹性盒模型的实际应用
    大图滚动--这是精髓实例
    三级联动
    sql
    jsp2
    marquee
    人机五子棋(AI算法有瑕疵)
    Jsp1
    倒计时
    时间
  • 原文地址:https://www.cnblogs.com/lijianda/p/11672093.html
Copyright © 2011-2022 走看看