下载文件

时间:2015-03-23 17:27:43

标签: asp.net-mvc asp.net-mvc-5

我有一个包含.mp4文件的文件夹,我想要下载。我有以下代码:

PartialView:

    @model List<string>

<div>
    <div class="messeDiv">
        <h2>Downloads</h2>
        <br /><br />

        @for (var i = 0; i < Model.Count; ++i)
        {
            <div>           
                @Model[i].ToString()             
            </div>

            <div>
                 @Html.ActionLink("Download file", "DownloadFile", "FileDownload")                
            </div>
        }

    </div>
</div>

控制器:

[Authorize]
    public ActionResult DownloadFile()
    {
        string userMail = User.Identity.GetUserName();
        string role = logic.GetUserRole(userMail);

        if (!role.ToLower().Equals("model"))
        {
            return PartialView("_DenyAcces");
        }

        var dir = new DirectoryInfo(Server.MapPath("~/Videos/"));
        FileInfo[] fileNames = dir.GetFiles("*.mp4");
        List<string> items = new List<string>();

        foreach (var file in fileNames)
        {
            items.Add(file.Name);
        }

        return PartialView("_AllFiles", items);
    }

我想这样做,如果我点击:@Html.ActionLink("Download file", "DownloadFile", "FileDownload")链接,那么我应该被问到是否要下载文件,就像普通可下载文件中发生的那样。我是asp.net mvc的新手,现在它对我来说已经失控了。我试过找到不同的例子,并从那些我已经编写的代码到目前为止。我还需要做些什么来实现我的目标?

现在,当我点击链接时,我被带到了网址:http://localhost:3918/FileDownload/DownloadFile,没有任何反应。

1 个答案:

答案 0 :(得分:0)

a)要发出确认消息,请告知用户您可以使用this

$(document).ready(function(){
    $('#downloadFileLink').click(function(){ 
       if(!window.confirm("Download file?"))
         return false;
    });
});

b)要返回文件,您需要一个返回FileResult的操作,如下所示。因此,我假设您的部分视图具有此下载链接,其中包含href中的路径。

public FileResult File(string path)
{
    if (!string.IsNullOrEmpty(path))
    {
            var fileName = Server.MapPath(path);
            var file = new FileInfo(fileName);
            if (file.Exists)
            {
                return File(fileName, "video/mpeg");
            }
    }

    //file is empty, so return null
    return null;
}

注意:我没有对此进行测试,但我认为它应该可以正常工作。