java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring boot大文件上传

Spring boot 处理大文件上传完整代码

作者:田猿笔记

这篇文章主要介绍了Spring boot 处理大文件上传,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

在Web上处理大文件上传时,可以使用以下方法来优化和处理大文件的上传:

1.前端处理:

2.服务器端处理:

完整代码:

当处理大文件上传时,可以使用Spring Boot来实现Web服务。下面是一个示例代码,演示如何使用Spring Boot处理大文件上传:

1. 创建Spring Boot项目:

   - 使用Spring Initializr(https://start.spring.io/)创建一个新的Spring Boot项目。 

- 选择所需的依赖,例如Spring Web、Spring Boot DevTools。

2. 编写控制器(Controller):

import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@Controller
@RequestMapping("/upload")
public class FileUploadController {
    @Value("${upload.directory}")
    private String uploadDirectory;
    @PostMapping
    public ResponseEntity<String> uploadFile(@RequestPart("file") MultipartFile file) {
        try (InputStream inputStream = file.getInputStream()) {
            // 获取上传文件的原始文件名
            String fileName = file.getOriginalFilename();
            // 生成保存文件的路径
            String filePath = uploadDirectory + File.separator + fileName;
            // 创建保存文件的目录(如果不存在)
            File directory = new File(uploadDirectory);
            if (!directory.exists()) {
                directory.mkdirs();
            }
            // 保存文件到指定路径
            try (OutputStream outputStream = new FileOutputStream(filePath)) {
                StreamUtils.copy(inputStream, outputStream);
            }
            // 文件保存成功
            return ResponseEntity.status(HttpStatus.OK).body("File uploaded successfully!");
        } catch (IOException e) {
            e.printStackTrace();
            // 文件保存失败
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("File upload failed!");
        }
    }
}

3. 配置上传文件的存储路径: 

   - 在`application.properties`或`application.yml`文件中,添加一个属性来指定上传文件的存储路径,例如:     ```properties     upload.directory=/path/to/upload/directory     ```

我使用@RequestPart注解代替了@RequestParam,以支持文件的流式处理。

通过MultipartFilegetInputStream()方法获取输入流,并使用StreamUtils.copy()方法将输入流复制到输出流中,实现了流式的文件上传和保存。这样可以避免将整个文件加载到内存中,而是通过边读取输入流、边写入输出流的方式来处理大文件。

这样的流式处理方式可以更好地处理大文件上传,并减少内存的使用。在使用这种方式时,可以处理非常大的文件而不会导致内存溢出。

4. 运行应用程序:   - 使用IDE工具(如IntelliJ IDEA)或命令行运行Spring Boot应用程序。

5. 测试文件上传:   - 使用HTTP客户端工具(如Postman)或表单提交一个文件到`/upload`接口,选择一个大文件进行上传。   - 可以查看指定的上传目录,确认文件是否被成功保存。

在这个示例中,我们创建了一个控制器`FileUploadController`,它处理POST请求并接收一个名为`file`的文件参数。在`uploadFile`方法中,我们获取上传文件的原始文件名,生成文件的保存路径,并将文件保存到指定路径。

你可以在`application.properties`或`application.yml`文件中设置`upload.directory`属性,来指定上传文件的存储路径。

这只是一个简单的示例,你可以根据具体的需求扩展和修改代码来满足你的业务要求。例如,你可以添加文件大小限制、文件类型验证、断点续传等功能。

到此这篇关于Spring boot 处理大文件上传的文章就介绍到这了,更多相关Spring boot大文件上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文