我有以下页面:
@{
if (Request["ID"].IsInt())
{
var imgID = Request["ID"].AsInt();
//Data
var db = Database.Open("AMSDArquiteturaConnectionString");
var image = db.QuerySingle("select * from Images where [ID] = @0", imgID);
if (image.MimeType.StartsWith("image"))
{
Response.AddHeader("content-disposition", "inline; filename=" + image.Name);
}
else
{
Response.AddHeader("content-disposition", "attachment; filename=" + image.Name);
}
Response.BinaryWrite((byte[])image.File);
}
}
我正在使用插件进行图像放大,我需要将链接指向图像。
<a rel="images" title="MyImage" href="ProjectImage?ID=@img.ID"></a>
问题是,当我点击链接时,我只看到一个没有意义的代码。
如何使此链接指向数据库中的图片?
答案 0 :(得分:1)
您需要确定问题是否与您使用插件的方式或Razor代码有关。直接请求页面,对imgID
的值进行硬编码以确保其正常工作。如果您已将数据库表和代码基于article from a bloke called Mikesdotnetting,则可以使用WebImage
帮助程序对其进行一些简化:
@{
WebImage image = null;
int id = Request["Id"].AsInt();
var db = Database.Open("FileUploading");
var sql = "Select * From Files Where FileId = @0";
var file = db.QuerySingle(sql, id);
if(file != null){
image = new WebImage((byte[])file.FileContent);
}
}
@if(image != null){
@image.Write(image.ImageFormat)
}
如果可以,那么插件可能就是问题所在。尝试从img
标记请求图像,src
指向生成图像的页面。这是一种奇怪的方法,它使用锚来显示图像而不是img
标签。
或者它可能是图像本身。 Only some image types are supported by browsers
答案 1 :(得分:0)
您可能需要指定mime类型。像这样:
Response.ContentType = image.MimeType
“无意义的代码”可能是图像,浏览器只是不知道数据代表图像并以原始格式显示。这段代码应告诉它需要知道什么。
答案 2 :(得分:0)
你为什么要在剃刀页面上这样做?它应该是控制器中的Action方法。这样的事情。
public ActionResult Image(int? id) {
if (id.HasValue) {
//Data
var db = Database.Open("AMSDArquiteturaConnectionString");
var Image = db.QuerySingle("select * from Images where [ID] = @0", id.Value);
FileContentResult result = new FileContentResult((byte[])Image.File, Image.MimeType);
if (Image.MimeType.StartsWith("image")) {
result.FileDownloadName = Image.Name;
}
return result;
} else {
return new HttpNotFoundResult();
}
}
我的猜测是,当你以这种方式使用时,视图引擎不喜欢它。