c# - 创建从服务器上的 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
。有人可以帮忙解释一下
解决方案
如果图像在数据库中,为什么要从 url 获取它。这只是一个额外的步骤。直接使用字节数组。我就是这样做的。
byte[] image = yourImageByteArray;
Stream stream = new MemoryStream(image);
LinkedResource res = new LinkedResource(stream, MediaTypeNames.Image.Jpeg);
推荐阅读
- html - MySQL 到 InnerHtml Angular 7
- php - Onlinenic API v4
- r - 如何从 R 中的两个不同来源更新 numericInput?
- python - 为 IntelliJ IDEA 社区版安装 Python 3 插件
- tsql - 如何在标量函数中使用 WITH?
- c# - Adyen:当用户从 iDEAL 重定向回我的 Web 应用程序时,如何在我的回调方法中验证 iDEAL 有效负载?
- c# - 用户自定义表单,wpf 绑定控件位置
- c++ - 使用 nlohmann 在 cpp 中输出 Json 数组
- ios - 功能切换 WatchKit 扩展
- swagger - API平台无法发布关系ID