SpringBoot Java实现文件上传下载功能

SpringBoot实现文件上传下载功能

配置和前端页面

  • maven配置文件
    <dependencies>
        <!--  web模块      -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--  thymeleaf 模板引擎      -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>
  • 前端页面
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.5.0/jquery.js"></script>
</head>
<body>
<h3>文件上传</h3>
<!--文件上传要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data"-->
<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file" >
    <br>
    <input type="submit" value="上传" >
</form>

[[${filename}]]

<br>
<!--渲染上传的图片-->
<img th:src="@{${filename}}" alt="图片" id="imgss">
<h3>文件下载</h3>
<form action="/download" method="get">
    <input type="hidden" name="imageName" id="imageName" th:value="${filename}"/>
    <input type = "submit"  value="点击图片下载" >
</form>
</body>
</html>
  • webconfig配置
@Configuration
public class MyWebAppConfigurer implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        
        //  用于前端匹配路径 /AAA-uploaded/** 的时候 可以直接定位到D://AAA-uploaded/图片存储的地址
        //  用于前端页面渲染图片
        registry.addResourceHandler("/AAA-uploaded/**").
                addResourceLocations("file:/" + "D://AAA-uploaded/");
    }
}
  • yaml配置文件
server:
  port: 8080

my-config:
  file-path: D:\

文件上传功能

MultipartFile接收前端传来的文件

@Value("${my-config.file-path}")
    private String myFilePath;

    @RequestMapping("upload")
    public String upload(@RequestParam("file") MultipartFile file, Model model) {
        try {
            //  避免图片名字重复 采用时间戳+图片名
            String fileName = System.currentTimeMillis() + file.getOriginalFilename();
            //  获取图片存放路径
            String destFileName = myFilePath + "AAA-uploaded" + File.separator + fileName;
            File destFile = new File(destFileName);
            //  判断上一级目录是否存在 不存在则创建
            if (!destFile.getParentFile().exists()) {
                destFile.getParentFile().mkdirs();
            }
            //  移动文件到指定目录下
            file.transferTo(destFile);
            //  存放到页面用于回显测试
            model.addAttribute("filename", "AAA-uploaded/" + fileName);
        } catch (Exception e) {
            e.printStackTrace();
            return "上传失败," + e.getMessage();
        }
        return "index";
    }

文件下载功能

ResponseEntity用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览器的响应报文

@Value("${my-config.file-path}")
    private String myFilePath;
@ResponseBody
    @RequestMapping("/download")
    public ResponseEntity<byte[]> testResponseEntity(@RequestParam(value = "imageName", required = false) String 	filename) throws IOException {
        //  获取图片名称返回给页面用于下载
        String name = filename.split("/")[1];
        File newfile = new File("D:/AAA-uploaded" + File.separator + name);
        if (!newfile.exists()) {
            throw new IOException(name + "文件不存在");
        }
        //  创建输入流
        InputStream is = new FileInputStream(newfile);
        //  创建字节数组
        byte[] bytes = new byte[is.available()];
        //  将流读到字节数组中
        is.read(bytes);
        //  创建HttpHeaders对象设置响应头信息
        MultiValueMap<String, String> headers = new HttpHeaders();
        //  设置要下载方式以及下载文件的名字
        headers.add("Content-Disposition", "attachment;filename="+ name);
        //  设置响应状态码
        HttpStatus statusCode = HttpStatus.OK;
        //  创建ResponseEntity对象
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers, statusCode);
        //  关闭输入流
        is.close();
        return responseEntity;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java Spring Boot中实现文件下载功能,可以按照以下步骤进行操作: 1. 首先,在项目的pom.xml文件中添加web依赖,如下所示: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 2. 创建一个HTML文件,用于实现文件下载的前端页面。 3. 在Spring Boot中,可以通过创建一个Controller来处理文件下载的请求。在Controller中,可以使用`@PostMapping`注解来处理文件请求,并使用`@GetMapping`注解来处理文件下载请求。在处理文件请求时,可以使用`MultipartFile`类型的参数来接收上文件。在处理文件下载请求时,可以使用`ResponseEntity`类型的返回值来返回文件给客户端。 4. 在Controller中,可以使用`File`类或`Path`类来处理文件的读取、写入和删除等操作。可以使用`Files`类提供的方法来实现文件的复制、移动和重命名等操作。 5. 在处理文件下载时,需要注意安全性和文件大小的限制。可以使用`@RequestParam`注解来限制文件的大小,并使用`@Valid`注解来验证文件的合法性。 通过以上步骤,您就可以在Java Spring Boot中实现文件下载功能了。希望以上信息对您有所帮助。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [java SpringBoot文件,](https://blog.csdn.net/qingqingyyds/article/details/126614747)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [SpringBoot 如何实现文件下载](https://blog.csdn.net/yujun2023/article/details/130905253)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值