Cách convert MultipartFile sang File trong Spring

Trong Spring, MultipartFile là một class đại diện cho các file được upload lên từ multipart request. Sau khi nhận một các tham số là dưới dạng MultipartFile có thể chúng ta sẽ cần chuyển chúng thành File để lưu trữ  lại ở serve hoặc cần thực thi một số tác vụ dưới dạng File thay vì MultipartFile.

Bài viết này sẽ giới thiệu một số cách để chúng ta có thể chuyển đổi MultipartFile sang File một cách dễ dàng.

MultipartFile#getBytes

MultipartFile cung cấp getBytes() method trả về một mảng bytes chứa nội dung của tập tin. Chúng ta có thể sử dụng method để tạo ra File instance từ mảng bytes mà nó trả về.

public File convertToFile(MultipartFile multipartFile) {
   File file = new File("src/main/resources/targetFile.tmp");

    try (OutputStream os = new FileOutputStream(file)) {
       os.write(multipartFile.getBytes());
    }
    return file;
}


Method getByte () còn được sử dụng cho các trường hợp chúng ta muốn thực hiện các thao tác bổ sung trên tệp trước khi ghi vào ổ cứng, chẳng hạn như tính toán mã băm của file.

MultipartFile#getInputStream

Tiếp theo chúng ta cũng có method getInputStream() của MultipartFile trả về InputStream mà từ đó chúng ta cũng có thể dễ dàng tạo ra một File instance.

public File convertToFile(MultipartFile multipartFile) {
   InputStream initialStream = multipartFile.getInputStream();
   byte[] buffer = new byte[initialStream.available()];
   initialStream.read(buffer);

   File targetFile = new File("src/main/resources/targetFile.tmp");

   try (OutputStream outStream = new FileOutputStream(targetFile)) {
      outStream.write(buffer);
   }
   return targetFile; 
}


MultipartFile#transferTo

Đối với những method được nêu ở trên có thể sẽ ích nếu chúng ta có nhiều nhu cầu hơn là tạo File instance chẳng hạn như tính toán mã hash của file v.v.

Chứ để tạo File từ MultipartFile từ method transferTo() giúp chúng ta đạt được ý định nhanh chóng và gọn lẹ hơn các method trên.

public File convertToFile(MultipartFile multipartFile) {
   File file = new File("src/main/resources/targetFile.tmp");
   multipartFile.transferTo(file);
   return file; 
}


Nguồn tham khảo

https://www.baeldung.com/spring-multipartfile-to-file

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/multipart/MultipartFile.html

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x