0
点赞
收藏
分享

微信扫一扫

Spring Boot中的文件上传和下载实现

文件上传
文件上传是Web应用程序中常见的功能之一,Spring Boot提供了MultipartFile接口来处理文件上传。以下是实现文件上传的步骤:

添加依赖
在pom.xml文件中添加以下依赖:

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

创建上传页面
在HTML页面中添加上传表单,例如:

<form method="POST" action="/upload" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <button type="submit">上传</button>
</form>

在表单中使用POST请求将文件上传到/upload路径。

实现上传接口
在Spring Boot应用程序中实现上传接口,例如:

@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) throws IOException {
    String fileName = file.getOriginalFilename();
    byte[] bytes = file.getBytes();
    Path path = Paths.get("uploads/" + fileName);
    Files.write(path, bytes);
    return "上传成功!";
}

在上面的代码中,我们使用@RequestParam注解来获取上传的文件,使用MultipartFile接口来处理文件上传,使用Files.write()方法将文件写入到指定路径。

配置上传文件大小限制
默认情况下,Spring Boot限制上传文件的大小为1MB。如果需要上传更大的文件,可以在application.properties文件中添加以下配置:

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

在上面的配置中,我们将上传文件的大小限制为10MB。

文件下载
文件下载是Web应用程序中另一个常见的功能,Spring Boot提供了ResourceLoader接口和Resource类来处理文件下载。以下是实现文件下载的步骤:

实现下载接口
在Spring Boot应用程序中实现下载接口,例如:

@GetMapping("/download")
public ResponseEntity<Resource> download(@RequestParam("file") String fileName) throws IOException {
    Resource resource = new FileSystemResource("uploads/" + fileName);
    HttpHeaders headers = new HttpHeaders();
    headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"");
    return ResponseEntity.ok().headers(headers).body(resource);
}



在上面的代码中,我们使用@RequestParam注解来获取要下载的文件名,使用ResourceLoader接口和Resource类来加载要下载的文件,使用ResponseEntity类来返回文件内容,使用HttpHeaders类来设置响应头。

配置下载文件大小限制
默认情况下,Spring Boot不限制下载文件的大小。如果需要限制下载文件的大小,可以在application.properties文件中添加以下配置:

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

在上面的配置中,我们将下载文件的大小限制为10MB。

以上是在Spring Boot中实现文件上传和下载的步骤。除了上述方法,还可以使用第三方库来实现文件上传和下载功能,例如Apache Commons FileUpload和Apache Commons IO。

使用Apache Commons FileUpload实现文件上传的步骤如下:

添加依赖
在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>



实现上传接口
在Spring Boot应用程序中实现上传接口,例如:

@PostMapping("/upload")
public String upload(HttpServletRequest request) throws Exception {
    ServletFileUpload upload = new ServletFileUpload();
    FileItemIterator iter = upload.getItemIterator(request);
    while (iter.hasNext()) {
        FileItemStream item = iter.next();
        String fileName = item.getName();
        InputStream inputStream = item.openStream();
        // 处理上传的文件
    }
    return "上传成功!";
}



在上面的代码中,我们使用ServletFileUpload类来处理文件上传,使用FileItemIterator类和FileItemStream类来遍历上传的文件,使用InputStream类来读取上传的文件内容。

使用Apache Commons IO实现文件下载的步骤如下:

添加依赖
在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>



实现下载接口
在Spring Boot应用程序中实现下载接口,例如:

@GetMapping("/download")
public ResponseEntity<byte[]> download(@RequestParam("file") String fileName) throws IOException {
    File file = new File("uploads/" + fileName);
    byte[] bytes = FileUtils.readFileToByteArray(file);
    HttpHeaders headers = new HttpHeaders();
    headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getName() + "\"");
    return ResponseEntity.ok().headers(headers).body(bytes);
}



在上面的代码中,我们使用FileUtils类来读取要下载的文件内容,使用ResponseEntity类来返回文件内容,使用HttpHeaders类来设置响应头。

以上是在Spring Boot中实现文件上传和下载的方法,选择适合自己的方法进行实现即可。

 

参考文章:http://blog.ncmem.com/wordpress/2023/12/04/spring-boot中的文件上传和下载实现/


举报

相关推荐

0 条评论