【发布时间】:2011-04-16 10:43:13
【问题描述】:
我的图片来自 Request.Files[0]。现在,如何将此图像上传到 S3?我看到在 AWS .NET API 中放置一个字符串对象时必须指定 ContentBody。如何获取文件的内容正文?
【问题讨论】:
标签: c# asp.net asp.net-mvc-2 amazon-s3 asp.net-4.0
我的图片来自 Request.Files[0]。现在,如何将此图像上传到 S3?我看到在 AWS .NET API 中放置一个字符串对象时必须指定 ContentBody。如何获取文件的内容正文?
【问题讨论】:
标签: c# asp.net asp.net-mvc-2 amazon-s3 asp.net-4.0
这很可能是一个 Base64 编码的字符串,但您应该查看 S3 文档以确定。如果是,您应该使用Convert.ToBase64String() 并将其传递给字节数组。
您可以尝试以下示例代码。我还没有测试过,但它应该可以帮助你得到正确的想法:
if (Request.Files.Count >= 1) {
var file = Request.Files[0];
var fileContents = new byte[file.ContentLength];
file.InputStream.Read(fileContents, 0, file.ContentLength);
var fileBase64String = Convert.ToBase64String(fileContents);
// now you can send fileBase64String to the S3 uploader
}
【讨论】:
var file = Request.Files[0];
PutObjectRequest request = new PutObjectRequest();
request.BucketName = "mybucket"
request.ContentType = contentType;
request.Key = key;
request.InputStream = file.InputStream;
s3Client.PutObject(request);
【讨论】:
关于如何使用文件夹和授予所有用户只读访问权限的详细信息。 html:
C#
HttpPostedFileBase file = Request.Files[0];
if (file.ContentLength > 0) // accept the file
{
string accessKey = "XXXXXXXXXXX";
string secretKey = "122334XXXXXXXXXX";
AmazonS3 client;
using (client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey))
{
MemoryStream ms = new MemoryStream();
PutObjectRequest request = new PutObjectRequest();
request.WithBucketName("mybucket")
.WithCannedACL(S3CannedACL.PublicRead)
.WithKey("testfolder/test.jpg").InputStream = file.InputStream;
S3Response response = client.PutObject(request);
}
更多详情请点击此处:http://bradoyler.com/post/3614362044/uploading-an-image-with-aws-sdk-for-net-c
【讨论】:
PurObjectRequest request = new PutObjectRequest()
{
BucketName = _bucketName,
CannedACL = S3CannedACL.PublicRead,
Key = string.Format("folderyouwanttoplacethefile/{0}", file.FileName),
InputStream = file.InputStream
};
YourS3client.PutObject(request);
【讨论】: