天天看点

springboot-上传单文件、多文件

今天通过springboot实现上传功能时遇到的以下问题

1.文件上传大小受到限制

网上很多都是添加spring.http.mutipart,但是yml会报deprecated configuration property...的错误,意思就是过时了。

之后在https://blog.csdn.net/csdn710924032/article/details/82753180文章中找到解决方法。将http换为servlet。成功解决问题。

spring:
  servlet:
    multipart:
     enabled: true
     max-file-size: 1024mb
     max-request-size: 1024mb
           

第二种方式是通过添加配置类的方式

@SpringBootApplication //声明被注解标注的类是springboot的入口类
@MapperScan(value = "com.testspringboot.mapper")
@Configuration
public class TestspringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestspringbootApplication.class, args);
    }

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        //单个文件最大
        factory.setMaxFileSize("5MB");
        /// 设置总上传数据总大小
        factory.setMaxRequestSize("50MB");
        return factory.createMultipartConfig();
    }
}
           

通过@Configuration与@bean注解的方法实现。

2.多文件上传时一次性选择多个问题

一次性选择多个文件就是在input type ="file”标签中添加 multiple。

<form method="POST" enctype="multipart/form-data" action="/upload/testuploadimgs">
    <p>文件1:<input type="file" name="file" multiple/></p>
    <p><input type="submit" value="上传" /></p>
</form>
           

下面是我的代码:考虑到要经常上传所以将上传的方法封装到一个工具类中。

工具类:

public class FileUtil {
    /**
     * 第一步:判断文件是否为空   true:返回提示为空信息   false:执行第二步
     * 第二步:判断目录是否存在   不存在:创建目录
     * 第三部:通过输出流将文件写入硬盘文件夹并关闭流
     * @param file
     * @return
     */
    public static String uploadFile(MultipartFile file){
        String fileName = file.getOriginalFilename();
        String filePath = "D:\\repository\\";
        File targetFile = new File(filePath);
        //第一步:判断文件是否为空
        if(file.isEmpty())return fileName+"文件为空";
        //第二步:判断目录是否存在   不存在:创建目录
        if(!targetFile.exists()){
            targetFile.mkdirs();
        }
        //第三部:通过输出流将文件写入硬盘文件夹并关闭流
        BufferedOutputStream stream = null;
        try {
            stream = new BufferedOutputStream(new FileOutputStream(filePath+fileName));
            stream.write(file.getBytes());
            stream.flush();
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                if (stream != null) stream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return fileName+"上传成功";
    }
}
           

controller层代码:

//处理文件上传
    @RequestMapping(value="/testuploadimg", method = RequestMethod.POST)
    public @ResponseBody String uploadImg(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
        String info = null;
        try {
            info = FileUtil.uploadFile(file);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return info;
    }
    //处理多文件上传
    @RequestMapping(value="/testuploadimgs", method = RequestMethod.POST)
    @ResponseBody
    public String multipleFilesUpload(HttpServletRequest request){
        //获取上传的文件数组
        List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
        //遍历处理文件
        String info = null;
        for (MultipartFile file:files) {
            try {
                String s = FileUtil.uploadFile(file);
                info = info+"-"+s;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return info;
    }
           

继续阅读