暂时上传到S3上,不用了就删除?

Don*_*ark 5 wysiwyg amazon-s3 rte reactjs

我正在尝试使用react-draft-wysiwyg 在react 上实现所见即所得文本编辑器。

为了使用文本编辑器上传图像,我尝试将 uploadCallback 函数上的文件发布到 S3 并将上传项目的 url 返回到编辑器。

但我不知道如何处理挂在我的 S3 存储桶中的未使用图像(在提交之前删除)。有什么好的方法可以预防这种情况吗?我试图以 base64 格式发布图像,但这似乎只是浪费内存。

Azi*_*ved 5

有几种方法可以解决这个问题:

从 Lambda 获取预签名 URL

您可以在 API 网关后面编写一个 lambda 函数,您可以调用该函数来为您提供预签名的 URL 以在 S3 上发布。此 URL 将允许拥有此 URL 的任何人一次上传到 S3。当用户准备好提交文本编辑器时,您只需使用预签名 URL 将附件发布到 S3 即可。

C# Lambda 示例

IAmazonS3 client;
client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1);
// Generate a pre-signed URL.
GetPreSignedUrlRequest request = new GetPreSignedUrlRequest
   {
       BucketName = bucketName,
        Key        = objectKey,
        Verb       = HttpVerb.PUT,
        Expires    = DateTime.Now.AddMinutes(5)
    };
string url = null;
 url = s3Client.GetPreSignedURL(request);

// Upload a file using the pre-signed URL.
HttpWebRequest httpRequest = WebRequest.Create(url) as HttpWebRequest;
httpRequest.Method = "PUT";
using (Stream dataStream = httpRequest.GetRequestStream())
{
   // Upload object.
}

HttpWebResponse response = httpRequest.GetResponse() as HttpWebResponse;
Run Code Online (Sandbox Code Playgroud)

您可以在AWS S3s 文档中找到更多有关通过用 Java、C#、Ruby 等编写的 Lambda 获取预签名 URL 的示例。

要从 Reactjs 应用程序上传到预签名 URL,您可以在这篇 Stackoverflow 帖子中找到一些很棒的示例。

S3 对象过期

您可以将所有待处理的镜像移至生命周期配置为在特定时间段内删除对象的存储桶。然后,当提交帖子时,您可以将对象从临时存储桶移动到更永久的存储桶。有关S3 对象过期的更多信息可以在他们的文档中找到。

  • 很好的解释,阿齐兹! (2认同)