我创建了一个文件夹来获取用户上传的文件。但是,当我尝试下载文件时,某些扩展程序无法下载。
我有这个代码列出文件夹中的所有文件,我可以看到所有文件没有问题。
@foreach (string fullFilePath in Directory.GetFiles(Path.Combine(Server.MapPath("~/uploadedFiles"),"Ticket Id - "+@id)))
{
<div class="linkFicheiros"><a href="@Href("~/uploadedFiles","Ticket Id - "+@id, Path.GetFileName(fullFilePath))">@Path.GetFileName(fullFilePath)</a></div>
}
使用此行
<a href="@Href("~/uploadedFiles","Ticket Id - "+@id, Path.GetFileName(fullFilePath))">@Path.GetFileName(fullFilePath)</a>
我可以下载带扩展名的文件:“。zip”,“。xls”但扩展名如“.msg”(有时用户需要上传此扩展程序)我收到错误“无法找到该页面”。即使是“.jpg”而不是下载文件,它也会在浏览器上打开图像。
我认为这是我试图访问该文件的方式,但我无法找到解决方案。
有什么想法吗?
答案 0 :(得分:1)
浏览器会尝试始终查看文件的内容。如果它的图像文件类似 .jng 等。但如果有 .zip 文件,则会让用户下载并打开它。因为浏览器无法打开它。
您需要将文件推送给用户。为此,您可以尝试以下代码:
var file = Server.MapPath("~/images/" + Request["img"]);
Response.AppendHeader(
"content-disposition", "attachment; filename=" +
Request["img"]);
Response.ContentType = "application/octet-stream";
Response.TransmitFile(file);
现在,您可以看到在我共享的代码中,该文件是一个变量,它指向文件系统中的文件。请注意,有一个Query String参数,该参数将与URL一起发送,例如:
下载图片
现在标题将被添加,
Request.ContentType = "application/octet-stream"
用于强制浏览器显示“打开/保存拨号”。
然后传输文件下载它。
要仅执行该下载代码块,您需要将条件中的值设置为true。例如,您可以使用参数来检查是否下载文件。尝试一些简单的事情,
<a href="~/download_file/image_link.png?download=true>Download</a>
然后在代码背后使用这个:
var download = Request.QueryString["download"];
if(download == "true") {
/* place the code here */
}
现在它只会在条件为真时执行,否则会跳过该部分。