springboot学习日志之DAY08文件上传功能

48 篇文章 0 订阅
38 篇文章 2 订阅

文件上传在项目当中非常常见。基本上就是通过流进行文件的传送,在springboot当中文件上传也是非常简单。

  第一步 pom文件内容

   

<dependencies>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
   </dependency>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
   </dependency>
</dependencies>

  第二步 application配置信息

# 是否支持批量上传 (默认值 true) 
spring.servlet.multipart.enabled=true 
# 上传文件的临时目录 (一般情况下不用特意修改) 
spring.servlet.multipart.location=
# 上传文件最大为 1M (默认值 1M ) 
spring.servlet.multipart.max-file-size=1MB 
# 上传请求最大为 10M(默认值10M) 
spring.servlet.multipart.max-request-size=10MB 
# 文件大小阈值,当大于这个阈值时将写入到磁盘,否则存在内存中,(默认值0 一般情况下不用特意修改) spring.servlet.multipart.file-size-threshold=0

注:如果上传的文件大小超过默认值会报错:org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededExcep

 第三步 后台上传代码

@RestController
@RequestMapping("/upload") 
public class UploadController extends BaseController { 
    @Value("${hjljy-upload-path}") 
    private String uploadPath; 

    @PostMapping("/upload1") public AjaxJson upload1(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
      File targetFile = new File(uploadPath); 
      if (!targetFile.exists()) {
          targetFile.mkdirs(); 
         } 
      try {
          FileOutputStream out = new FileOutputStream(uploadPath + file.getOriginalFilename());
          out.write(file.getBytes()); 
          out.flush(); out.close();
      } catch (IOException e) { 
        logger.error("文件上传错误:"+e.getMessage());
     } AjaxJson ajaxJson = new AjaxJson();
     HashMap list =new HashMap<>(); 
     list.put("src", "/files/"+file.getOriginalFilename());  
     ajaxJson.setSuccessData(list); 
     return ajaxJson; 
    }
}

注意事项:代码中的 uploadPath 的值是外部文件夹:

hjljy-upload-path =/var/uploaded_files/

这是因为在使用springboot项目时,最后打包成jar运行时,每次运行jar都会新生成一个tomcat文件夹。之前上传的文件就获取不到了。所以需要在外部固定一个文件夹当成上传文件夹。

同时需要添加代码:

@Component
public class WebConfigurer implements WebMvcConfigurer {

    @Value("${hjljy-upload-path}")
    private  String uploadPath;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/files/**").addResourceLocations("file://"+uploadPath);
    }
}

代码的含义是:添加一个外部静态资源映射:所有的/files/** 请求会到uploadPath下面去找对应的静态资源。

例如:127.0.0.1/files/bg01.jpg这个请求实际的文件查找路径是找uploadPath下面的bg01.jpg这个图片。

以上一个简单的文件上传就搞定了。

2019年6月

注意事项:

1 在项目添加了外部静态资源映射后,如果项目有shiro等权限拦截器,还需要对静态资源路径放行。

2 uploadPath必须要用/闭合起来,如果uploadPath=/var/test      是会找不到静态资源的,正确方式  uploadPath=/var/test/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值