我创建了一个文件夹来获取用户上传的文件。然而,当我尝试下载这些文件时,有些扩展插件无法下载。
我有这个代码来列出文件夹中的所有文件,我可以毫无问题地查看所有文件。
@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",它也不会下载文件,而是在浏览器上打开图像。
我想这就是我试图访问文件的方式,但我无法找到解决方案。
有什么想法吗?
浏览器会尝试始终查看文件的内容。如果是像.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);
现在,您可以看到,在我共享的代码中,文件是一个变量,它指向文件系统中的文件。请注意,有一个查询字符串参数,它将与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 */
}
现在,它只会在条件为true的情况下执行,否则它将跳过该部分。