繁体   English   中英

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

[英]Uploaded files duplicated in my project and AWS S3 bucket

我创建了 Java 程序,可以将文件保存在 AMAZON 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));
}

做与您所做的类似的事情是很常见的。 我个人喜欢 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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM