首页 > 解决方案 > 创建从服务器上的 URL 获取的 Image 的 LinkedResource

问题描述

我有一个表单,允许用户上传图像,然后通过电子邮件发送。图像在数据库中存储为varbinary. 我有一个页面叫做image.aspx. 该页面查找查询字符串image.aspx?id=10022,然后搜索数据库并找到具有 id 的图像10022

一旦我有了bytes我就这样做image.aspx

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "image/jpeg";
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();

这将生成一个页面,其中仅包含存储在数据库中的图像。如果您访问的 url 类似www.website.come/image.jpg,除了看起来像website.com/image.aspx?id=10022

然后在原始上传表单上,我将图像显示在上传时Image Control给出的图像 url 中。

protected void upBtn_Click(object sender, EventArgs e)
{
     byte[] image = FileUp.FileBytes;
     String name = FileUp.FileName;
     int id = db.UploadImage(name, image);
     productImg.ImageUrl = "~/image.aspx?id=" + id.ToString();
}

图像立即显示在图像控件中。我的下一步是我遇到问题的地方。我正在尝试LinkedResource通过将其写入 a 来创建此图像的 a stream,但是System.ArgumentException: Illegal characters in path.无论我尝试什么都会出错。

这就是我尝试创建LinkedResource.

LinkedResource res = new LinkedResource(GetStreamFromUrl(path), MediaTypeNames.Image.Jpeg));
private Stream GetStreamFromUrl(string url)
{
     byte[] imageData = null;
     using (var wc = new System.Net.WebClient())
         imageData = wc.DownloadData(Server.MapPath(url));//the error happens right here

     return new MemoryStream(imageData);
}

在这种情况下,路径将从 获得productImg.ImageUrl,它等于~/image.aspx?id=10022。有人可以帮忙解释一下

标签: c#asp.net

解决方案


如果图像在数据库中,为什么要从 url 获取它。这只是一个额外的步骤。直接使用字节数组。我就是这样做的。

byte[] image = yourImageByteArray;
Stream stream = new MemoryStream(image);
LinkedResource res = new LinkedResource(stream, MediaTypeNames.Image.Jpeg);

推荐阅读