美文网首页JAVA
SpringBoot基础教程(十一) | 文件篇

SpringBoot基础教程(十一) | 文件篇

作者: youzhihua | 来源:发表于2019-11-06 18:05 被阅读0次

文件上传与下载

在实际项目中,经常需要文件的上传和下载功能,如果使用Apache的Commons-fileupload和commons-io包实现,会编写大量的代码;而SpringBoot对其进行了封装简化,只需要少量的代码便可以实现文件上传下载的功能。

引入依赖

        <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>

编写配置文件

# 关闭thymeleaf缓存,防止更改不生效
spring.thymeleaf.cache=false
# 设置文件上传的大小上限(默认1M),单位是字节(KB)
spring.servlet.multipart.max-file-size=10485760
# 设置静态文件路径,可以直接访问html文件
spring.resources.static-locations=classpath:/templates/

编写Demo页面

在src/resource/templates文件夹下,新建一个FileDemo.html文件。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h2>文件上传示例</h2>
    <div>
        <form method="POST" enctype="multipart/form-data" action="/file/upload">
            <p>
                <input type="file" name="multipartFile"/>
                <input type="submit" value="上传"/>
            </p>
        </form>
    </div>
    <br>
    <h2>文件下载示例</h2>
    <div>
        <a href="/file/download">下载文件</a>
    </div>
</body>
</html>

编写控制器

@RestController
@RequestMapping("/file")
public class FileController {

    /**
     * 文件上传
     * @param multipartFile
     * @return
     */
    @PostMapping(value = "/upload")
    public boolean uploadFile(MultipartFile multipartFile){
        String root = "D:\\数据\\";
        //加时间戳防止重名
        String filename = System.currentTimeMillis() + "_" + multipartFile.getOriginalFilename();
        //创建目标文件位置
        File file = new File(root+filename);
        //写入文件
        try {
            multipartFile.transferTo(file);
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 文件下载
     */
    @GetMapping(value = "/download")
    public void downloadFile(HttpServletResponse response) throws IOException {
        //设置编码
        response.setCharacterEncoding("UTF-8");
        //设置资源的MIME类型
        response.setContentType("application/x-jpg;charset=UTF-8");
        //设置现在文件的文件名(使用URLEncode,防止中文乱码)
        response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("示例图片.jpg","UTF-8"));

        //读写文件
        FileInputStream fileInputStream = new FileInputStream("D://1.jpg");
        BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
        OutputStream out = response.getOutputStream();
        byte[] buffer = new byte[1024];
        int len = bufferedInputStream.read(buffer);

        while(len != -1){
            out.write(buffer);
            len =bufferedInputStream.read(buffer);
        }

        //关闭流
        bufferedInputStream.close();
        fileInputStream.close();
        out.close();
    }
}
  • 测试

在浏览器输入localhost:8080/FileDemo.html,进入以下界面,进行操作即可。

测试界面.png

完整的工程代码链接:https://github.com/youzhihua/springboot-training

相关文章

网友评论

    本文标题:SpringBoot基础教程(十一) | 文件篇

    本文链接:https://www.haomeiwen.com/subject/cjqpbctx.html