AWS S3 tomcat 8上的设备上没有剩余空间

时间:2017-02-10 16:30:35

标签: java amazon-web-services tomcat amazon-s3 amazon-elastic-beanstalk

我正在使用以下代码写入现在有很多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");

1 个答案:

答案 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而不使用临时文件。