gog*_*gog 6 c# amazon-s3 amazon-web-services
我正在开发一个C#应用程序,我将一些上传到AWS S3服务.我正在阅读文档,我无法找到上传后获取公共URL的位置.继承我的代码:
public void AddFile(Stream image, string key)
{
var uploadRequest = new TransferUtilityUploadRequest();
uploadRequest.CannedACL = S3CannedACL.PublicRead;
uploadRequest.InputStream = image;
uploadRequest.BucketName = _bucket;
uploadRequest.Key = key;
using (TransferUtility fileTransferUtility = new TransferUtility(_client))
{
fileTransferUtility.Upload(uploadRequest);
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我使用S3CannedACL.PublicRead将文件的访问权限设置为公共文件.所以它会像CDN一样,我知道亚马逊拥有CDN服务器的CloudFront服务,但我必须使用S3常规存储桶.
我想知道在上传方法之后是否可以获取固定网址.我只是可以在教程和文档上看到PreSignedUrl带有过期时间的" ",但我不希望过期时间,我需要将此URL保存在数据库中.
谢谢
Rod*_*o M 16
您的应用程序应使用某些配置/属性文件,其中存储存储桶的名称以供以后参考.例如,使用具有如下定义的属性的属性文件:
application.bucket=mybucket-example-com
Run Code Online (Sandbox Code Playgroud)
在引用应用程序中的存储桶时(例如_bucket,application.bucket在代码中替换)以及要表达或返回公共URL时,请使用此值.
如果您的应用已将文件上传到密钥userid/images/test.jpg,则公开网址可表示为:
https://[application.bucket].s3.amazonaws.com/[key]
Run Code Online (Sandbox Code Playgroud)
这将解析为公共URL
https://mybucket-example-com.s3.amazonaws.com/userid/images/test.jpg
这种方法的好处在于,在测试环境中,您可以在测试配置中指定不同的存储桶.
在测试中,您可能想要使用application.bucket=test-mybucket-example-com.
这样,在生产和测试环境之间切换时,您的代码不需要对此进行任何更改.
您实际上可以根据存储桶名称和上传文件的路径构建此 url。请参阅有关访问存储桶的文档,其中描述了 url 格式。
例如:
https://bucket.s3.amazonaws.com/path/to/your/file
https://bucket.s3-aws-region.amazonaws.com/path/to/your/file
https://s3-aws-region.amazonaws.com/bucket/path/to/your/file
Run Code Online (Sandbox Code Playgroud)
请注意,您的文件必须是公开的,否则您的权限将被拒绝。
注意:路径样式 (https://s3-aws-region.amazonaws.com/bucket/path/to/your/file现已弃用,不应再使用
| 归档时间: |
|
| 查看次数: |
6929 次 |
| 最近记录: |