上传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://上传完成后即可生成下载过期链接。
示例:
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 响应
Apache zeppelin 无法从 Amazon S3 笔记本 json 文件中获取 URL
使用 Filesystem Laravel 5.2 从 amazon s3 获取文件的签名 URL