2

我之前已经将一个文件上传到我的数据库中,现在我想从我的数据库中下载该文件。

谁能告诉我怎么做?我是 C# 和 ASP.NET MVC 的新手。

控制器 :

public ActionResult Details(string id = null)
{
        Assignment assignment = db.Assignments.Find(id);

        if (assignment == null)
        {
            return HttpNotFound();
        }

        return View(assignment);
}

模型:

public string AssignmentID { get; set; }
public Nullable<System.DateTime> SubmissionDate { get; set; }
public string Status { get; set; }
[Range(0,100, ErrorMessage="Only Value between 0-100 is accepted.")]
public Nullable<decimal> Mark { get; set; }
public string Comments { get; set; }
public byte[] FileLocation { get; set; }

看法:

<div class="display-label">
    <%: Html.DisplayNameFor(model => model.FileLocation) %>
</div>
<div class="display-field">
    <%: Html.DisplayFor(model => model.FileLocation) %>
</div>
4

3 回答 3

6

由于您拥有文件的 aStreambyte[]or 路径,因此您可以使用File()来自Controller基类的方法,并将此文件响应为ActionResult,例如:

public ActionResult Details(string id = null)
{
     Assignment assignment = db.Assignments.Find(id);

     if (assignment == null)
     {
         return HttpNotFound();
     }

     return File(assigment.FileLocation, "content/type", "fileName.extension");
}

记住要正确content-type并添加fileName正确的扩展名。

于 2014-08-06T17:01:19.173 回答
1

您必须使用@url.action在视图上显示图像:

看法 :

<%: Url.Action("ImageDetails","// your controller name//", new{ id = item.ID }) %>

在你的行动中:

public ActionResult ImageDetails(string id = null)
{
     Assignment assignment = db.Assignments.Find(id);

     return File(assignment.FileLocation, "content/type", "file.extension");
}

记住要正确content-type并正确添加文件,extension否则文件将无法正确呈现在视图中。

如果您只想下载文件而不显示,那么:-

public ActionResult Details(string id = null)
{
     Assignment assignment = db.Assignments.Find(id);

     return File(assignment.FileLocation, "content/type", "file.extension");
}
于 2014-08-06T17:07:33.713 回答
1

根据您从数据库中检索文件的方式,您可以使用 ASP.NET MVC 的File()辅助方法将文件返回给客户端。

这篇博客文章很好地描述了如何使用File()帮助程序以及最终返回的内容。

希望这可以帮助。

于 2014-08-06T16:54:02.690 回答