gpt4 book ai didi

spring - Spring 多部分文件上传究竟是如何工作的?

转载 作者:行者123 更新时间:2023-12-05 02:21:26 27 4
gpt4 key购买 nike

我开发了一个文件服务器,它必须使用 spring boot 处理大文件上传 (>1GB)。不想使用主存的情况下如何实现上传?

这是我的代码:

final String id = GenerationHelper.uuid();
final File newFile = new File(id);
LOG.info("New file: " + id + " with size " + content.getSize());
if (!content.isEmpty()) {

FileInputStream in = null;
FileOutputStream out = null;
long totalBytes = 0;

try {
in = (FileInputStream) content.getInputStream();
out = new FileOutputStream(newFile);

byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer);
totalBytes += bytesRead;
LOG.info(bytesRead);
}
} catch (IOException e) {
LOG.error("Failed to save file", e);
newFile.delete();
} finally {
try {
in.close();
out.close();
} catch (IOException e) {
LOG.error("Error creating new file with id " + id + ". Deleting this file...", e);
}
}
LOG.info(totalBytes + " Bytes read");
}

日志输出是在文件上传完成后开始的,所以我猜文件已经上传了。是否可以直接将上传写入文件系统?

提前致谢!最大

最佳答案

分段上传将写入磁盘上的临时位置或保存在内存中。正如 MultipartFile 的 javadoc 中所解释的,在请求处理结束时清理文件之前,您有责任将文件移动到永久位置。

The file contents are either stored in memory or temporarily on disk. In either case, the user is responsible for copying file contents to a session-level or persistent store as and if desired. The temporary storages will be cleared at the end of request processing.

您可以通过调用 MultiPartFile.transferTo(File) 移动内容(从内存或磁盘上的临时位置)。

文件是保存在内存中还是写入临时位置取决于底层实现。例如,Commons File Upload 将在内存中存储小于 10240B 的文件,将更大的文件写入磁盘。

关于spring - Spring 多部分文件上传究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34296470/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com