springboot文件上传与下载

springboot文件上传与下载

文件上传

在springboot中默认使用MultipartResolver 的实现类StandardServletMultipartResolver 所以,如果要使用CommonsMultipartResolver则注入就好

	@Bean
    public MultipartResolver multipartResolver() {
        // 默认配不配都行,如果使用CommonsMultipartResolver,注入就行
//        StandardServletMultipartResolver resolver = new StandardServletMultipartResolver();
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setDefaultEncoding("UTF-8");
        resolver.setMaxInMemorySize(900 * 1024); // 900KB
        resolver.setMaxUploadSize(100 * 1024 * 1024);// 上传文件大小 100M
        return resolver;
    }

且只需要导入web包即可

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

前端代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <button type='submit'>上传</button>
    </form>
</body>
</html>

后端代码(上传一个文件)

@Controller
public class FileController {

    @PostMapping("/upload")
    @ResponseBody
    public String upload(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return "文件不能为可空!";
        }
        // 使用日期来分类管理上传的文件
        String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        File folder = new File("D:/E/upload/" + format);
        if (!folder.exists()) {
            folder.mkdirs();
        }
        String oldName = file.getOriginalFilename();
        String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."));
        File newFile = new File(folder, newName);
        try {
            //保存文件,返回文件路径
            file.transferTo(newFile);
            return folder + newName;
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }
        return "error";
    }
}

后端代码(上传多2个或者多个)

@PostMapping("/uploads2")
@ResponseBody
public String uploads2(MultipartFile file1, MultipartFile file2) {
    // 使用日期来分类管理上传的文件
    String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
    File folder = new File("D:/E/upload/" + format);
    if (!folder.exists()) {
        folder.mkdirs();
    }
    try {
        String oldName = file1.getOriginalFilename();
        String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."));
        File newFile = new File(folder, newName);
        //保存文件
        file1.transferTo(newFile);

        oldName = file2.getOriginalFilename();
        newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."));
        newFile = new File(folder, newName);
        //保存文件
        file2.transferTo(newFile);
        return "success";
    } catch (IOException ioException) {
        ioException.printStackTrace();
    }
    return "error";
}

@PostMapping("/uploads")
@ResponseBody
public String uploads(MultipartFile[] files) {
    // 使用日期来分类管理上传的文件
    String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
    File folder = new File("D:/E/upload/" + format);
    if (!folder.exists()) {
        folder.mkdirs();
    }
    try {
        for (MultipartFile file : files) {
            if (file.isEmpty()) {
                System.out.println("文件不能为可空!");
                continue;
            }
            String oldName = file.getOriginalFilename();
            String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."));
            File newFile = new File(folder, newName);
            //保存文件
            file.transferTo(newFile);
        }
        return "success";
    } catch (IOException ioException) {
        ioException.printStackTrace();
    }
    return "error";
}
文件下载
  1. 后端代码
 @GetMapping("/download")
    @ResponseBody
    public ResponseEntity<byte[]> download() throws Exception {
        //下载文件,简单new个文件
        String downloadFilePath = "D:/E/upload/2020-10-20/8d053ae3-5fcb-4a7a-ab68-6e69e706f84c.jpg";
        File downloadFile = new File(downloadFilePath);
        String downloadFilenName = "下载文件名123" + downloadFile.getName().substring(downloadFile.getName().lastIndexOf("."));

        HttpHeaders headers = new HttpHeaders();
        //下载显示的文件名,并解决中文名称乱码问题
        String downloadFileName = new String(downloadFilenName.getBytes("UTF-8"), "iso-8859-1");
        //通知浏览器以attachment(下载方式)打开
        headers.setContentDispositionFormData("attachment", downloadFileName);
        //applicatin/octet-stream: 二进制流数据(最常见的文件下载)
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

        // 使用下org.apache.commons.io.FileUtils工具类
        byte[] bytes = FileUtils.readFileToByteArray(downloadFile);
        return new ResponseEntity<byte[]>(bytes, headers, HttpStatus.CREATED);
//    }
    }
  1. 前端代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>文件上传和下载</title>
</head>
<body>
    <form action='http://localhost:8080/file/upload' method='post' enctype='multipart/form-data'>
        <input type='file' name='file'>
        <button type='submit'>上传</button>
    </form>
    <a href="template/asd.jpg" download="aaname.jpg">下载</a>
</body>
</html>
  1. 配置依赖
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

转载于:https://blog.csdn.net/qq_42402854/article/details/109177610

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值