我创建了一个Java程序,可以将文件保存在亚马逊S3存储中-它工作正常,但它不仅将文件保存在S3桶中,还保存在我的项目目录中。
这是我保存文件到S3的代码。我想它保存在项目目录中的原因也是-创建指定路径的文件示例-File file = new File(timestamp + ".jpg");
,但我如何避免这一点,并仍然设置所需的文件名,而不将其保存到项目目录?
public void saveFileToStorage(String url, Long timestamp, Integer deviceId) {
S3Repository repository = new S3Repository(bucketName);
File file = new File(timestamp + ".jpg");
try {
URL link = new URL(url);
Thread.sleep(1500);//wait until URL is ready for download
FileUtils.copyURLToFile(link, file);
repository.uploadFile(timestamp.toString(), file, deviceId.toString()+"/");
} catch (IOException | InterruptedException e) {
log.error(e.getMessage() + " - check thread sleep time!");
throw new RuntimeException(e);
}
}
下面是我从存储库上传的方法:
public void uploadFile(String keyName, File file, String folder) {
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(0);
s3client.putObject(bucketName, folder, new ByteArrayInputStream(new byte[0]), metadata);
s3client.putObject(new PutObjectRequest(bucketName, folder+keyName, file));
}
1条答案
按热度按时间6jygbczu1#
做一些与您所做的类似的事情是很常见的。我个人喜欢PutObjectRquest构建器。
要解决您的问题,使用
RequestBody.fromByteBuffer()
代替RequestBody.fromFile()
怎么样?在这里你可以找到一个例子:https://stackabuse.com/aws-s3-with-java-uploading-files-creating-and-deleting-s3-buckets/