SpringBoot实现文件上传

  • Post author:
  • Post category:其他



其实这里涉及一个上传文件大小的限制,这个我等会再说


话不多说,咱们直接上Demo 就从控制层开始吧


(代码截图也封上 方便如果这种的小菜鸡阅读)

(代码也整过来吧 方便咱们copy 到时候直接改就行了)


/*


  • consumes= { MediaType.MULTIPART_FORM_DATA_VALUE }   指定传输数据为二进制类型,比如图片、mp3、文件

  • produces=”application/json;charset=UTF-8″           设置返回数据的类型以及编码

  • */




    @PostMapping(value



    = “/import”, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}, produces = “application/json;” +

    “charset=UTF-8”)

    public CommonResponse uploadFile(




    @RequestParam(value



    = “file”) MultipartFile file) throws UnsupportedEncodingException {


    return CommonResponse.success(colophonService.uploadFile(file));

    }

  • Service层

  • String uploadFile(



    MultipartFile



    file);

  • 实现类

  • @Value(“${upload.version.path}”)




    private



    String realPath;

  • @Value


    注解将变量进行自动注入 (这里注入的这个其实是我要把文件上传到的地方,因为只是个Demo,所以我就让他传到Windows好了,Linux同理)它在配置文件里是这样的,哦对了忘了告诉你这个格式是


    .properties文件
  • 正在上传…重新上传取消

  • 实现方法,它来了(代码截图)

  • 代码

  • /*

    * @Transactional 开启事务

    * propagation = Propagation.REQUIRED 假如当前正要执行的事务不在另外一个事务里,那么就起一个新的事务

    * rollbackFor = {Error.class, Exception.class} 任何异常都回滚

    * */

  • @Override

    @Transactional(propagation = Propagation.



    REQUIRED



    , rollbackFor = {Error.



    class



    , Exception.



    class



    })




    public



    String uploadFile(



    MultipartFile



    file) {


    File targetFile =



    new



    File(realPath);



    //获取指定路径 也就是咱们刚说的要上传的位置

    if



    (!targetFile.exists()) {




    //如果指定文件夹不存在




    targetFile.mkdirs();



    //创建文件夹




    }




    // 原文件名称 file.getOriginalFilename()

    // 从父路径名字符串和子路径名字符串创建新的 File实例。这个File方法的话 就自己去看源码吧




    File upload =



    new



    File(realPath, file.getOriginalFilename());




    try



    {





    //InputStream和File相互转化




    org.apache.commons.io.FileUtils.



    copyInputStreamToFile



    (file.getInputStream(), upload);

    }



    catch



    (Exception e) {





    log



    .info(“导入失败”, e);

    }




    return



    file.getOriginalFilename();

    }

  • 到这里也就执行成功了,但是在上面咱说了 这个是有文件大小限制的,如果上传文件过大,那肯定会报异常啦,别急我告诉你这玩意咋整

  • 1、首先咱们要在配置文件里配置一下



    文件可接收到的大小限制



  • multipart.maxFileSize



    =2000MB




    multipart.maxRequestSize



    =2500MB(这是我所使用的SpringBoot版本)

  • 这里涉及一个相关SpringBoot版本的位置格式

  • Spring Boot 1.3.x或者之前


multipart.maxFileSize=100Mb


multipart.maxRequestSize=1000Mb


Spring Boot 1.4.x


spring.http.multipart.maxFileSize=100Mb


spring.http.multipart.maxRequestSize=1000Mb


Spring Boot 2.0之后


spring.servlet.multipart.max-file-size=100MB


spring.servlet.multipart.max-request-size=1000MB


当你配置完之后启动项目调用方法会发现(⊙o⊙)…卧槽!怎么还不行,别急你在启动类再加个东西试试呢?


@Bean




public



MultipartConfigElement multipartConfigElement(@Value(“${multipart.maxFileSize}”)String maxFileSize, @Value(“${multipart.maxRequestSize}”) String maxRequestSize) {


MultipartConfigFactory factory =



new



MultipartConfigFactory();

factory.setMaxFileSize(DataSize.



parse



(maxFileSize));

factory.setMaxRequestSize(DataSize.



parse



(maxRequestSize));




return



factory.createMultipartConfig();

}


到这里也就完事了,当然可能也有些像我一样的菜鸡不知道这种上传文件应该如何测试,那么咱们就用postman来唠一唠吧


作者也是个刚入行的小垃圾 写的不对的地方请各位哥哥们批评指正



版权声明:本文为HuAibEiReN原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。