1
我需要從S3中檢索圖像。我無法公開文件夾,也無法使用預先設置的URL,所以我只剩下GetObject();.現在我將找回的圖像必須設置爲Iframe的來源。爲此,我使用HttpWebHandler。問題是,如果我檢索一個HTML頁面,它工作正常。但是當我嘗試重新獲得圖像時,我得到的只是垃圾數據。這裏是我的代碼:從S3獲取圖像
public void ProcessRequest(HttpContext context)
{
NameValueCollection appConfig = ConfigurationManager.AppSettings;
_accessKeyId = appConfig["AWSAccessKey"];
_secretAccessKeyId = appConfig["AWSSecretKey"];
S3 = new AmazonS3Client(_accessKeyId, _secretAccessKeyId);
string responseBody = "";
var request = new GetObjectRequest()
.WithBucketName(bucketName).WithKey("020/images/intro.jpg");
var responseHeaders = new ResponseHeaderOverrides
{
ContentType = "image/jpeg"
};
request.ResponseHeaderOverrides = responseHeaders;
using (var response = S3.GetObject(request))
{
using (var responseStream = response.ResponseStream)
{
using (var reader =
new StreamReader(responseStream))
{
responseBody = reader.ReadToEnd();
}
}
}
context.Response.Write(responseBody);
context.Response.Flush();
context.Response.End();
}
}
謝謝賈森,我還有一個相關的問題。您看到的上述代碼是我試圖從S3檢索HTML文件的程序的一部分。 HTML文件具有與之相關的對象(CSS,javascript,Images)。現在我有一個Web處理程序來獲取流並將其設置爲源。問題是我不知道傳入流的內容類型。你的代碼將工作得很好如果我只使用Images,但我也必須流式傳輸其他類型。有沒有辦法確定傳入流的內容類型?再次感謝您的幫助,非常感謝! –
您有兩種選擇:您可以在S3中存儲內容時設置內容類型,並在返回時使用該內容類型值,或者可以根據文件的擴展名猜測類型。這裏有代碼(http://stackoverflow.com/questions/58510/using-net-how-can-you-find-the-mime-type-of-a-file-based-on-the-file-signature ),它有一些嗅探MIME類型的示例方法。使用文件擴展名可能足夠滿足您的需求,因此使用靜態字典或Windows註冊表可能是一個可接受的解決方案。 – Jason