gpt4 book ai didi

c# - 从 S3 获取图像

转载 作者:行者123 更新时间:2023-11-30 17:12:24 26 4
gpt4 key购买 nike

我需要从 S3 检索图像。我无法公开该文件夹,也无法使用预签名的 URL,所以我只剩下 GetObject();。现在我要取回的图像必须设置为 Iframe 的源。为此,我使用了 HttpWebHandler。问题是,如果我检索一个 html 页面,它工作正常。但是当我试图取回图像时,我得到的只是垃圾数据。这是我的代码:

 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();
}
}

最佳答案

这里有几个问题:

  1. 您正在为从亚马逊返回的响应设置 Content-Type,而不是为您的应用程序的响应设置
  2. 您正在使用 StreamReader 以文本形式读取流的内容,然后将其作为文本写回

试试这个:

using (var response = S3.GetObject(request))
{
using (var responseStream = response.ResponseStream)
{
context.Response.ContentType = "image/jpeg";

var buffer = new byte[8000];
int bytesRead = -1;
while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0)
{
context.Response.OutputStream.Write(buffer, 0, bytesRead);
}
}
}

context.Response.End();

关于c# - 从 S3 获取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10695363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com