spring boot 学习手册
  • 介绍
  • 基础教程
    • 1.RESTfull API简单项目的快速搭建
    • 2.配置文件详解:Properties和YAML
    • 3.配置文件-多环境配置
    • 4.日志配置-logback和log4j2
  • web应用开发
    • 1.模板引擎
    • 2.模板引擎FreeMarker
    • 3.模板引擎Thymeleaf
    • 4.模板引擎jsp
    • 5.错误处理
    • 6.Servlets, Filters, listeners
    • 7.CORS支持
    • 8.文件上传
    • 9.Interceptor拦截器
    • 10.AOP统一处理Web请求日志
    • 11.全局统一异常处理
    • 12. Retry重试
    • 13.RestTemplate
  • 关系型数据库
    • 1.JdbcTemplate
    • 2.Spring-data-jpa
      • @Id 和 @GeneratedValue 详解
      • 配置与注解备注
      • 全局统一前缀策略
      • 映射关系详解
      • 查询、分页、排序
      • JPA 资料
      • 进阶:jpa自定义行为方法
      • 进阶:锁
      • 进阶:Hibernate Validator
    • 3.事务处理
  • NoSQL数据库
    • 1.Redis
    • 2.Mongodb
  • Cache
    • 1.EhCache
    • 2.Redis
  • 异步消息服务
    • 1.JMS(ActiveMQ)
    • 2.AMQP(RabbitMQ)
  • Mybatis
    • Mybatis 初使用
    • Mybatis环境搭建
    • Mybatis开发流程
    • 业务开发流程
    • Mybatis资料
  • 进阶
    • 1.调用REST服务-使用代理
    • 2.发送邮件
    • 3.Spring Session实现集群-redis
    • 4.如何进行远程调试
    • 5.生产准备-基于HTTP的监控
    • 6.Spring Boot集成mybatis
    • 7.Spring Boot集成Druid
    • 8.Spring Boot集成Swagger
    • 9.生产部署-注意事项和如何使用脚本
  • 升华
    • Jenkins部署Spring Boot
    • 异步处理Http请求
    • FastDFS
    • Docker
    • 定时任务(corn job)
    • 批处理
    • @Async实现异步调用
  • 单元测试
    • WireMock伪造服务
  • 安全
    • 1.Spring Security
      • 认证
    • 2.Apache Shiro
  • TaskExecutor 异步线程池
  • 其他
    • 1.修改启动时显示
    • 2.获取配置文件中的值
    • 3.嵌入式容器
    • 4.配置SSL
    • 5.websocket
    • 6.Spring IO Platform
  • RESTfull API 开发
  • 附录:Eclipse - Spring Tool Suite工具的安装
  • 附录:Eclipse部署Maven
  • 附录:SpringBoot相关模块
  • 附录:注解笔记
  • 资料
  • 开发技巧
  • maven插件
Powered by GitBook
On this page
  • 一、Spring Boot 默认使用 springMVC 包装好的解析器进行上传
  • 二、添加代码
  • 三、配置
  • 资料

Was this helpful?

  1. web应用开发

8.文件上传

一、Spring Boot 默认使用 springMVC 包装好的解析器进行上传

二、添加代码

模板中使用

<form method="POST" enctype="multipart/form-data" action="/file/upload"> 文件:
<input type="file" name="testFile" />
<input type="submit" value="上传" />
</form>
@Controller
@RequestMapping(value = "/file")
public class FileController {

    private static final Logger logger = LoggerFactory.getLogger(FileController.class);

    @RequestMapping(value = "upload")
    @ResponseBody
    public String upload(@RequestParam("testFile") MultipartFile file) {
         if (file.isEmpty()) {
            return "文件为空";
        }

        // 获取文件名
        String fileName = file.getOriginalFilename();
        logger.info("上传的文件名为:" + fileName);

        // 获取文件的后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
         logger.info("上传的后缀名为:" + suffixName);

        // 文件上传路径
        String filePath = "/tmp/test/";


        // 解决中文问题,liunx 下中文路径,图片显示问题
        // fileName = UUID.randomUUID() + suffixName;


        File dest = new File(filePath + fileName);

        // 检测是否存在目录
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }

        try {

            file.transferTo(dest);
            return "上传成功";

        } catch (IllegalStateException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();
        }

        return "上传失败";
    }
}

三、配置

spring.http.multipart.enabled=true #默认支持文件上传.
spring.http.multipart.file-size-threshold=0 #支持文件写入磁盘.
spring.http.multipart.location= # 上传文件的临时目录 
spring.http.multipart.max-file-size=1Mb # 最大支持文件大小 
spring.http.multipart.max-request-size=10Mb # 最大支持请求大小

附录:

rest 上传,下载示例

@RestController
@RequestMapping("/file")
public class FileController {
    
    @PostMapping("/upload")
    public FileInfo update(MultipartFile file) throws Exception {
    
        System.out.println(file.getContentType());
        System.out.println(file.getName());
        System.out.println(file.getOriginalFilename());
        System.out.println(file.getSize());
        
        String path = "/tmp";
        String extention = StringUtils.substringAfterLast(file.getOriginalFilename(), ".");
        File localfile = new File(path, new Date().getTime()+"."+extention);
        file.transferTo(localfile);
        
        return new FileInfo(localfile.getAbsolutePath());
        
    }
    
    @GetMapping("/download")
    public void download(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String filePath = "/tmp/1111.txt";
        try(InputStream inputStream = new FileInputStream(filePath);
            OutputStream outputStream = response.getOutputStream();){
            
            response.setContentType("application/x-download");
            response.addHeader("Content-Disposition", "attachment;filename=test.txt");
            
            IOUtils.copy(inputStream, outputStream);
            outputStream.flush();
        }
        
    }

}

注意上面下载的时候try使用了新特性,在try括号中声明了资源,他会在执行完成后自动释放掉,否则需要自己写finaly释放资源。

FileInfo.java

public class FileInfo {
    
    public FileInfo(String path) {
        this.path = path;
    }
    
    private String path;

    .....省略get set方法
    
}

资料

Previous7.CORS支持Next9.Interceptor拦截器

Last updated 5 years ago

Was this helpful?

Spring Boot入门——文件上传与下载
详细全面的 SpringBoot 文件上传
使用Spring Boot上传文件