4

我是 ASP.net 的新手,想知道使用其过期链接从外部域(Amazon S3)加载照片并将照片存储在浏览器内存中以供另一个使用 OpenBinary 方法的脚本获取是多么容易? 这允许我在打印到屏幕之前调整大小并添加水印。

这就是我想要发生的事情:

在 loadImage.aspx 上,我从我的数据库中获取 photoID,为 Amazon S3 创建一个过期的签名 URL,以某种方式调用照片并将其保存到内存中。在内存中,我的 ASP.Jpeg 脚本将调用 OpenBinary 方法,调整照片大小和水印,并使用 SendBinary 方法显示照片。

我认为内存流或响应二进制写入可能是我正在寻找的东西,但不确定如何在外部照片源上使用它。这是我迄今为止所管理的,但我感到困惑并认为我会得到帮助,因为我不确定这是否会起作用,如果我可以在内存中加载外部域照片,如果我错过了一些重要的东西.. ..

我的图像元素:

<img src="loadImage.aspx?p=234dfsdfw5234234">

在 loadImage.aspx 上:

string AWS_filePath = "http://amazon............"

using (FileStream fileStream = File.OpenRead(AWS_filePath))
{
    MemoryStream memStream = new MemoryStream();
    memStream.SetLength(fileStream.Length);
    fileStream.Read(memStream.GetBuffer(), 0, (int)fileStream.Length);
}

// Persits ASP.Jpeg Component

objJpeg.OpenBinary( ... );
// resize bits
// watermark bits
objJpeg.SendBinary( ... );

任何帮助都会很棒。

4

1 回答 1

5

首先开始使用处理程序.ashx而不是整.aspx页。处理程序没有对 aspx 页面的所有调用,更清楚您要发送的内容,并且您避免了所有现有的标头。

<img src="loadImage.ashx?p=234dfsdfw5234234">

如何下载图像。

string url = "http://amazon............"
byte[] imageData;
using (WebClient client = new WebClient()) {
   imageData = client.DownloadData(url);
}

如何将图像发送到浏览器

// this is the start call from the handler
public void ProcessRequest(HttpContext context)
{
    // imageData is the byte we have read from previous
    context.Response.OutputStream.Write(imageData, 0, imageData.Length);
}

如何设置缓存和标头

    public void ProcessRequest(HttpContext context)
    {
      // this is a header that you can get when you read the image
      context.Response.ContentType = "image/jpeg";
      // the size of the image
      context.Response.AddHeader("Content-Length", imageData.Length.ToString());
      // cache the image - 24h example
  context.Response.Cache.SetExpires(DateTime.Now.AddHours(24));
      context.Response.Cache.SetMaxAge(new TimeSpan(24, 0, 0));
      // render direct
      context.Response.BufferOutput = false;

    ...
    }

我希望这些提示可以帮助您继续前进。

相对:
https ://stackoverflow.com/search?q=%5Basp.net%5D+DownloadData

于 2012-07-21T09:24:55.840 回答