19

我有带有对象表的网页。

我的对象属性之一是文件路径,该文件位于同一网络中。我想要做的是将此文件路径包装在链接下(例如下载),在用户单击此链接后,文件将下载到用户机器中。

所以在我的桌子里面:

@foreach (var item in Model)
        {    
        <tr>
            <th width ="150"><p><b><a href="default.asp" target="_blank">Download</a></b></p></th>
            <td width="1000">@item.fileName</td>
            <td width="50">@item.fileSize</td>
            <td bgcolor="#cccccc">@item.date<td>
        </tr>
    }
    </table>

我创建了这个下载链接:

<th width ="150"><p><b><a href="default.asp" target="_blank">Download</a></b></p></th>

我想要这个下载链接来包装我的file path并点击链接将倾向于我的控制器:

public FileResult Download(string file)
{
    byte[] fileBytes = System.IO.File.ReadAllBytes(file);
}

我需要在我的代码中添加什么才能实现这一点?

4

3 回答 3

33

从您的操作中返回 FileContentResult。

public FileResult Download(string file)
{
    byte[] fileBytes = System.IO.File.ReadAllBytes(file);
    var response = new FileContentResult(fileBytes, "application/octet-stream");
    response.FileDownloadName = "loremIpsum.pdf";
    return response;
}

还有下载链接,

<a href="controllerName/Download?file=@item.fileName" target="_blank">Download</a>

此链接将使用参数 fileName 向您的下载操作发出获取请求。

编辑:对于未找到的文件,您可以,

public ActionResult Download(string file)
{
    if (!System.IO.File.Exists(file))
    {
        return HttpNotFound();
    }

    var fileBytes = System.IO.File.ReadAllBytes(file);
    var response = new FileContentResult(fileBytes, "application/octet-stream")
    {
        FileDownloadName = "loremIpsum.pdf"
    };
    return response;
}
于 2013-11-14T10:59:01.313 回答
0

在视图中,写:

<a href="/ControllerClassName/DownloadFile?file=default.asp" target="_blank">Download</a>

在控制器中,编写:

public FileResult DownloadFile(string file)
    {
        string filename = string.Empty;
        Stream stream = ReturnFileStream(file, out filename); //here a backend method returns Stream
        return File(stream, "application/force-download", filename);
    }
于 2015-02-03T15:39:47.433 回答
0

这个例子对我来说很好:

public ActionResult DownloadFile(string file="")
        {

            file = HostingEnvironment.MapPath("~"+file);

            string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            var fileName = Path.GetFileName(file);
            return File(file, contentType,fileName);    

        }

看法:

< script >
function SaveImg()
{
    var fileName = "/upload/orders/19_1_0.png";
    window.location = "/basket/DownloadFile/?file=" + fileName;
}
< /script >
<img class="modal-content" id="modalImage" src="/upload/orders/19_1_0.png" onClick="SaveImg()">
于 2017-01-17T16:23:34.963 回答