我有一个包含.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
,没有任何反应。
答案 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;
}
注意:我没有对此进行测试,但我认为它应该可以正常工作。