上传amazon s3后获取文件url

Posted

技术标签:

【中文标题】上传amazon s3后获取文件url【英文标题】:Getting file url after upload amazon s3 【发布时间】:2014-02-03 15:32:15 【问题描述】:

将文件上传到 amazons3 服务器后,我需要获取文件 url。 这是我的上传代码。 如何返回amazons3路径?

public static bool UploadToS3(string bucketName, string bucketFilePath, Byte[] localPath)
    
        var client = Amazon.AWSClientFactory.CreateAmazonS3Client(Config.EmailServer.AwsAccessKey, Config.EmailServer.AwsSecretKey, Amazon.RegionEndpoint.EUWest1);

        PutObjectRequest request = new PutObjectRequest()
        
            BucketName = bucketName,
            Key = bucketFilePath,
            InputStream = new MemoryStream(localPath),
            AutoCloseStream = true,
            CannedACL = S3CannedACL.PublicRead,
            StorageClass = S3StorageClass.ReducedRedundancy                
        ;

        PutObjectResponse response = client.PutObject(request);
        return true;
    

【问题讨论】:

什么是“PutObjectRequest”和“PutObjectResponse”?它们是 Amazon S3 库的组件吗? 您的意思是您的对象的外部 URL?你真的不需要得到它。众所周知: https://.s3.amazonaws.com/mykey 。如果您想要 AWS 的内部,它是 s3:///mykey 【参考方案1】:

上传完成后即可生成下载过期链接。

示例:

var expiryUrlRequest = new GetPreSignedUrlRequest()
                           .WithBucketName(BucketName)
                           .WithKey(Key)
                           .WithExpires(DateTime.Now.AddDays(10));

string url = _amazonS3Client.GetPreSignedURL(expiryUrlRequest);

【讨论】:

有办法从响应对象中获取吗? @ricardofranca 没必要。该请求只需要存储桶名称和密钥,如果您只是将文件写入该存储桶名称和密钥,则无论如何都应该拥有。 @ricardofranca 这取决于上传对象的 ACL 策略。如果您将其设置为公开(任何主体都可以在没有凭据的情况下访问它),那么您无需创建 PreSignedURL,您可以使用存储桶名称和对象密钥构建 URL。 最长有效期 604800 秒。【参考方案2】:

试试这个方法

GetPreSignedUrlRequest request = new GetPreSignedUrlRequest();
request.BucketName = "my-bucket-name";
request.Key        = "secret_plans.txt";
request.Expires    = DateTime.Now.AddHours(1);
request.Protocol   = Protocol.HTTP;
string url = client.GetPreSignedURL(request);
Console.WriteLine(url);

【讨论】:

以上是关于上传amazon s3后获取文件url的主要内容,如果未能解决你的问题,请参考以下文章

节点 JS AWS S3 文件上传。如何获取公共 URL 响应

使用 Axios 进行 Amazon S3 远程文件上传

Apache zeppelin 无法从 Amazon S3 笔记本 json 文件中获取 URL

使用 Filesystem Laravel 5.2 从 amazon s3 获取文件的签名 URL

Amazon S3 预签名 URL - 手动或一次性上传无效

使用Rails显示存储在Amazon S3上的PDF