Java 将大文件的 MultipartFile 转换为 File

Abd*_*heb 5 java spring multipart

我使用以下方法将 MultipartFile 转换为文件:

public File convert(MultipartFile file) throws IOException {
        File convFile = new File(file.getOriginalFilename());
        convFile.createNewFile();
        FileOutputStream fos = new FileOutputStream(convFile);
        fos.write(file.getBytes());
        fos.close();
        return convFile;
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但对于大文件我得到了这个例外:

java.lang.OutOfMemoryError:Java堆空间

我添加了更多堆,但仍然出现错误。

那么是否有一种编程方法可以解决这个问题,可能在转换时将多部分文件分割成更小的块,但我不确定如何编码。

任何帮助或建议将不胜感激。

Fir*_*aya 2

MultipartFile属于Spring的包吗org.springframework.web.multipart?如果是这样,你可以这样做

  public File convert(MultipartFile file) throws IOException {
    File convFile = new File(file.getOriginalFilename());
    convFile.createNewFile();
      try(InputStream is = file.getInputStream()) {
        Files.copy(is, convFile.toPath()); 
      }
    return convFile;
  }
Run Code Online (Sandbox Code Playgroud)

  • @AbdenaceurLichiheb `Files.readAllBytes()` 将所有字节读取到内存中并可能导致 OOME。您应该尝试从流中读取。 (2认同)