java 上传的文件在我的项目和AWS S3存储桶中重复

8dtrkrch  于 2023-01-29  发布在  Java
关注(0)|答案(1)|浏览(238)

我创建了一个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));
}
6jygbczu

6jygbczu1#

做一些与您所做的类似的事情是很常见的。我个人喜欢PutObjectRquest构建器。

S3Client client = S3Client.builder().build();
PutObjectRequest request = PutObjectRequest.builder()
                        .bucket("bucketName").key("fileName").build();
client.putObject(request, RequestBody.fromFile(new File("filePath")));

要解决您的问题,使用RequestBody.fromByteBuffer()代替RequestBody.fromFile()怎么样?
在这里你可以找到一个例子:https://stackabuse.com/aws-s3-with-java-uploading-files-creating-and-deleting-s3-buckets/

相关问题