链接到图像数据库

时间:2011-07-01 23:23:22

标签: asp.net razor webmatrix

我有以下页面:

@{
    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>

问题是,当我点击链接时,我只看到一个没有意义的代码。

如何使此链接指向数据库中的图片?

3 个答案:

答案 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();
    }
}

我的猜测是,当你以这种方式使用时,视图引擎不喜欢它。