使用特定密钥的亚马逊网络服务批量文件上传

Amazon web service batch file upload using specific key

我想问问有没有办法使用TransferManager(或任何其他class)为每个上传的文件设置一个密钥?我目前正在为此使用 uploadFileList 方法,我注意到我可以为使用 ObjectMetadataProvider 接口发送的每个文件定义一个回调,但我只有 ObjectMetadata 供我使用。我以为可以获取父ObjectRequest并在其中设置键值,但这似乎不可能。

我想要实现的目标:

MultipleFileUpload fileUpload = tm.uploadFileList(bucketName, "", new File(directory), files, new ObjectMetadataProvider() {
            @Override
            public void provideObjectMetadata(File file, ObjectMetadata objectMetadata) {
                objectMetadata.getObjectRequest().setKey(myOwnKey);
            }
        });

我很可能遗漏了一些明显的东西,但我花了一些时间寻找答案,但在任何地方都找不到。我的问题是,如果我为这种方法提供一些文件,它会将它们的绝对路径(或类似的东西)作为键名,这对我来说是不可接受的。感谢任何帮助。

我差点忘了这个post。 没有优雅的解决方案,所以我不得不求助于制作自己的传输管理器(MultiUpload)并手动检查每个上传的列表。 然后我可以在创建 Upload 对象时为每个对象设置密钥。

        List<Upload> uploads = new ArrayList();
        MultiUpload mu = new MultiUpload(uploads);

        for (File f : files) {
            // Check, if file, since only files can be uploaded.
            if (f.isFile()) {

                String key = ((!directory.isEmpty() && !directory.equals("/"))?directory+"/":"")+f.getName();

                ObjectMetadata metadata = new ObjectMetadata();

                uploads.add(tm.upload(
                        new PutObjectRequest(bucketName,
                                key, f)
                                .withMetadata(metadata)));
            }
        }