在C#.NET web应用程序中,我可以将AmazonS3对象直接下载到内存中,并将其作为映像使用吗?

在C#.NET web应用程序中,我可以将AmazonS3对象直接下载到内存中,并将其作为映像使用吗?,c#,asp.net,amazon-s3,C#,Asp.net,Amazon S3,使用AWS.NETSDK,我可以直接将S3对象(一个.jpg图像文件)下载到内存中吗?我肯定几个月前我看到了解决这个问题的方法,但现在找不到 假设我可以将文件直接下载到内存中,那么我可以使用 context.Response.Write(memoryStream object); 谢谢你的帮助。我知道你可能在想,你为什么要这么做?为什么不直接链接到文件?这是一个复杂的原因,我只是想暂时保持简单。干杯 您当然可以从另一个源获取数据并将其加载到内存中,但您必须以某种方式获取数据 最有可能的形式是w

使用AWS.NETSDK,我可以直接将S3对象(一个.jpg图像文件)下载到内存中吗?我肯定几个月前我看到了解决这个问题的方法,但现在找不到

假设我可以将文件直接下载到内存中,那么我可以使用

context.Response.Write(memoryStream object);

谢谢你的帮助。我知道你可能在想,你为什么要这么做?为什么不直接链接到文件?这是一个复杂的原因,我只是想暂时保持简单。干杯

您当然可以从另一个源获取数据并将其加载到内存中,但您必须以某种方式获取数据

最有可能的形式是web获取。您可以很容易地使用一个连接到S3对象URL的接口获取数据,将数据读入内存流,然后将数据写入响应流。我建议您跳过内存流步骤,对S3 fetch响应进行缓冲读取,然后写入ASP.NET响应

这种方法有一些警告。首先,如果S3对象不可公开访问,您必须解决安全问题。其次,在获取此数据时,初始ASP.NET请求将暂停,这将增加将图像获取到浏览器的延迟,只需链接到对象即可轻松修复该延迟

例如:

// Assuming url is the  url to the S3 object.
var buffer = new byte[1024*8]; // 8k buffer. 
var request = (HttpWebRequest)WebRequest.Create(url);
var response = request.GetResponse();
int bytesRead = 0;
using (var responseStream = response.GetResponseStream())
{
    while((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) != 0)
    {
         Response.OutputStream.Write(buffer, 0, bytesRead);
    }
}

您当然可以从另一个源获取数据并将其加载到内存中,但您必须以某种方式获取数据

最有可能的形式是web获取。您可以很容易地使用一个连接到S3对象URL的接口获取数据,将数据读入内存流,然后将数据写入响应流。我建议您跳过内存流步骤,对S3 fetch响应进行缓冲读取,然后写入ASP.NET响应

这种方法有一些警告。首先,如果S3对象不可公开访问,您必须解决安全问题。其次,在获取此数据时,初始ASP.NET请求将暂停,这将增加将图像获取到浏览器的延迟,只需链接到对象即可轻松修复该延迟

例如:

// Assuming url is the  url to the S3 object.
var buffer = new byte[1024*8]; // 8k buffer. 
var request = (HttpWebRequest)WebRequest.Create(url);
var response = request.GetResponse();
int bytesRead = 0;
using (var responseStream = response.GetResponseStream())
{
    while((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) != 0)
    {
         Response.OutputStream.Write(buffer, 0, bytesRead);
    }
}

我不确定这是否回答了你的问题,但我正在创建文件,所以我拥有它们。谢谢如果你使用的是AWS.NETSDK,这里有一个人和你有同样的问题,谢谢-这正是我要找的。我很好奇@Randolpho,你认为使用.NET SDK比标准的HttpWebRequest快吗?@Hairgami_Master更快?不,差不多。SDK将为您抽象出构建URL和获取数据。我不确定这是否回答了您的问题,但我正在创建文件,所以我拥有它们。谢谢如果你使用的是AWS.NETSDK,这里有一个人和你有同样的问题,谢谢-这正是我要找的。我很好奇@Randolpho,你认为使用.NET SDK比标准的HttpWebRequest快吗?@Hairgami_Master更快?不,差不多。SDK将为您抽象出构建URL和获取数据。谢谢@Randolpho-我拥有这些图片,可以将它们公开。您认为这种方法比使用AWS.NETAPI快/慢吗?干杯。就原始速度而言,通过AWS SDK拖动对象与我提到的方法大致相同。事实上,考虑到您列出的场景,您将使用上面的大部分代码——唯一要替换的是
var-request=…
var-response=…
。如果你最担心的是速度,那就想办法公开这些图片,并在HTML中链接到它们。我知道你已经说过你不能这么做,但这是让它更快的唯一方法。再次感谢@Randolpho。最后我用了你的例子。我试图让AWS.NET包装器工作,但由于某种原因,我不能。干杯谢谢@Randolpho-我拥有这些图片,可以把它们公之于众。您认为这种方法比使用AWS.NETAPI快/慢吗?干杯。就原始速度而言,通过AWS SDK拖动对象与我提到的方法大致相同。事实上,考虑到您列出的场景,您将使用上面的大部分代码——唯一要替换的是
var-request=…
var-response=…
。如果你最担心的是速度,那就想办法公开这些图片,并在HTML中链接到它们。我知道你已经说过你不能这么做,但这是让它更快的唯一方法。再次感谢@Randolpho。最后我用了你的例子。我试图让AWS.NET包装器工作,但由于某种原因,我不能。干杯