我正在使用以下代码写入现在有很多xml文件的S3存储桶。我在设备错误上没有剩余空间。后续上传失败。我看到在var / cache / tomcat8 / temp文件夹中创建了很多文件。我正在通过我的代码删除文件。有人可以帮助我理解这里有什么问题吗?实际上,我们想在将它上传到S3后立即删除它。
Path path = Files.createTempFile(filename, suffix);
file = path.toFile();
Files.write(path, incomingXml.getBytes(StandardCharsets.UTF_8));
if(file!=null){
file.deleteOnExit();
}
s3client.putObject(new PutObjectRequest(fullBucketPathByDate, filename, file));
LOGGER.info("Upload completed");
答案 0 :(得分:0)
来自File.deleteOnExit
docs(强调我的):
请求此抽象路径名表示的文件或目录 在虚拟机终止时删除。
这意味着只有在关闭Tomcat进程后才会删除临时文件。您需要做的是在完成将文件上传到S3后立即删除该文件。像这样:
Path path = Files.createTempFile(filename, suffix);
file = path.toFile();
Files.write(path, incomingXml.getBytes(StandardCharsets.UTF_8));
if(file!=null){
s3client.putObject(new PutObjectRequest(fullBucketPathByDate, filename, file));
file.delete();
}
LOGGER.info("Upload completed");
或者,查看将文件内容直接流式传输到S3而不使用临时文件。