aws s3删除对象不起作用

时间:2018-02-21 14:50:27

标签: spring amazon-s3

我尝试使用spring boot上传/删除aws s3存储桶中的图像。

public class AmazonClient {
    private AmazonS3 s3client;

private void initializeAmazon() {
    AWSCredentials credentials = new BasicAWSCredentials(this.accessKey, this.secretKey);
    this.s3client = AmazonS3ClientBuilder.standard().withRegion(region).withCredentials(new AWSStaticCredentialsProvider(credentials)).build();
}
private void uploadFileTos3bucket(String fileName, File file) {
    s3client.putObject(new PutObjectRequest(bucketName, fileName, file)
            .withCannedAcl(CannedAccessControlList.PublicRead));
}

public void deleteFileFromS3Bucket(String fileUrl) {
    String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
    s3client.deleteObject(new DeleteObjectRequest(bucketName + "/", fileName));
}
}

上传功能运行良好,我可以看到该文件已上传到s3存储桶,但删除功能似乎出现故障,我收到一条成功的消息,但该文件仍在存储桶中。

如果有人能帮我解决问题,请提前致谢。

4 个答案:

答案 0 :(得分:0)

来自deleteObject的javadoc(强调我的)

  

删除指定存储桶中的指定对象。删除后,只有在删除对象时启用了版本控制才能恢复该对象。   

如果尝试删除不存在的对象,Amazon S3将返回成功消息而不是错误消息。

因此,您在fileName中构建的路径(deleteFileFromS3Bucket)很可能不会指向S3对象。

修改

我根据评论更新了我的答案:

使用的文件名具有特殊字符(在提供的示例中为:),其获得URL编码(编码百分比)。此编码的网址不能用于检索或删除S3对象,因为网址中的百分比会再次被编码(%被编码为%25)。

必须解码编码的URL。一种方法是使用java.net.URLDecoder

URLDecoder.decode(encodedPath, "UTF-8")

答案 1 :(得分:0)

刚刚发现我在new DeleteObjectRequest添加了一个额外的斜杠。

答案 2 :(得分:0)

public boolean deleteFileFromS3Bucket(String fileUrl) {
        String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
        try {
            DeleteObjectsRequest delObjReq = new DeleteObjectsRequest(bucketName).withKeys(fileName);
            s3client.deleteObjects(delObjReq);
            return true;
        } catch (SdkClientException s) {
            return false;
        }
    }

对我来说,在这里工作是一种选择。

答案 3 :(得分:-1)

我试图查看提到的许多解决方案。唯一对我有用的是通过Cyber​​duck删除它(我既不为它工作,也不在提倡Cyber​​duck,我确实使用过它并且起作用了)。这是我所做的步骤:

1-下载并安装Cyber​​duck。

2-单击打开连接

3-从下拉列表中选择Amazon S3(默认为FTP)

4-输入访问密钥ID和秘密访问密钥(如果没有,则需要通过AWS上的IAM在s3存储桶中创建一个)

5-您将看到S3存储桶的列表。选择要删除的文件或文件夹或存储桶,右键单击并删除。甚至0kb的文件也会显示在此处,可以删除。

希望这会有所帮助