我有包含对象表的网页。
我的一个对象属性是文件路径,此文件位于同一网络中。我想要做的是将此文件路径包装在链接下(例如下载),在用户单击此链接后,该文件将下载到用户计算机中。
所以在我的桌子里面:
@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);
}
为了实现这一点,我需要添加到我的代码中吗?
答案 0 :(得分:29)
从您的操作中返回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向您的下载操作发出get请求。
编辑:对于找不到的文件,你可以,
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;
}
答案 1 :(得分: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);
}
答案 2 :(得分: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()">
答案 3 :(得分:0)
在相应的控制器文件中使用此代码:
public ActionResult Index()
{
foreach (string upload in Request.Files)
{
if (Request.Files[upload].FileName != “”)
{
string path = AppDomain.CurrentDomain.BaseDirectory + “/App_Data/uploads/”;
string filename = Path.GetFileName(Request.Files[upload].FileName);
Request.Files[upload].SaveAs(Path.Combine(path, filename));
}
}
return View(“Upload”);
}