【问题标题】:ASP.NET MVC3: Image loading through controllerASP.NET MVC3:通过控制器加载图像
【发布时间】:2011-06-03 09:47:53
【问题描述】:

我尝试使用来自here 的答案,但没有奏效。我有以下代码:

public ActionResult ShowImage() 
{
    using (FileStream stream = new FileStream(Path.Combine(Server.MapPath("/App_Data/UserUpload/asd.png")), FileMode.Open))
    {
        FileStreamResult result = new FileStreamResult(stream, "image/png");
        result.FileDownloadName = "asd.png";
        return result;
    }

}

当我打开页面时,我收到一条错误消息:“无法访问已关闭的文件。”。我对该错误进行了一些谷歌搜索,但我只发现此错误与上传相关。是什么导致了这里的问题?

【问题讨论】:

    标签: image asp.net-mvc-3 controller


    【解决方案1】:

    试试这样:

    public ActionResult ShowImage() 
    {
        var file = Server.MapPath("~/App_Data/UserUpload/asd.png");
        return File(file, "image/png", Path.GetFileName(file));
    }
    

    或者如果你想要一个单独的文件名:

    public ActionResult ShowImage() 
    {
        var path = Server.MapPath("~/App_Data/UserUpload");
        var file = "asd.png";
        var fullPath = Path.Combine(path, file);
        return File(fullPath, "image/png", file);
    }
    

    【讨论】:

    • 成功了,谢谢!我还是有点兴趣,为什么我提供的代码不起作用?
    • @Esa,在您提供的代码中,您已将 FileStream 包装到 using 子句中,这意味着该流将在控制器操作返回之前被释放。但是动作结果将在 MVC 管道中执行得更晚,当它尝试使用您传递给 FileStreamResult 的 Stream 时,它将被关闭。
    猜你喜欢
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 2013-08-05
    相关资源
    最近更新 更多