使用webmatrix从文件夹下载文件

时间:2014-04-09 15:24:15

标签: razor webmatrix

我创建了一个文件夹来获取用户上传的文件。但是,当我尝试下载文件时,某些扩展程序无法下载。

我有这个代码列出文件夹中的所有文件,我可以看到所有文件没有问题。

@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”而不是下载文件,它也会在浏览器上打开图像。

我认为这是我试图访问该文件的方式,但我无法找到解决方案。

有什么想法吗?

1 个答案:

答案 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 */
}

现在它只会在条件为真时执行,否则会跳过该部分。