我正在使用LitS3 library帮助将我的ASP.NET MVC应用程序中的照片上传到Amazon S3。
我已经阅读了所有文档,用Google搜索,我无法弄清楚如何在上传时为照片设置cache-control
标题。
我知道你可以用REST API做到这一点,但是因为我正在使用LitS3库,所以这不是一个选项(除非我完全废弃了库)。
有没有人想出怎么做?
我看到文档中有一节“想要更多的灵活性” - 这似乎可以访问近100%的API,但看不出我如何将其应用到我的情况。
以下是我目前的上传方式:
var s3 = new S3Service { AccessKeyID = _accessKey, SecretAccessKey = _secret };
s3.AddObject(inputStream,
_bucketName,
fileName,
contentType,
CannedAcl.PublicRead);
inputStream
是Stream
,我从MVC行动中的HttpPostedFileBase.InputStream
获得。
AddObject
重载都不支持设置除content-type之外的任何其他标头。所以看起来我需要深入挖掘并使用更低级别的方法,但正如我所说 - 只是无法找到方法。
有人可以帮忙吗?
答案 0 :(得分:2)
知道了!感谢this thread,它与缓存控制无关,但它显示了如何将AddObjectRequest
与给定的Stream
一起使用。
如果有其他人感兴趣,这是工作代码:
// Create S3 service.
var s3 = new S3Service { AccessKeyID = _accessKey, SecretAccessKey = _secret };
// Create HTTP Request.
var request = new AddObjectRequest(s3, _bucketName, fileName)
{
CacheControl = "max-age=864000",
CannedAcl = CannedAcl.PublicRead,
ContentType = contentType,
ContentLength = inputStream.Length
};
// Upload photo.
using (var outStream = request.GetRequestStream())
{
var buffer = new byte[inputStream.Length > 65536 ? 65536 : inputStream.Length];
var position = 0;
while (position < inputStream.Length)
{
var read = inputStream.Read(buffer, 0, buffer.Length);
outStream.Write(buffer, 0, read);
position += read;
}
outStream.Flush();
}
var response = request.GetResponse();
response.Close();