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

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

有什么想法吗?

浏览器会尝试始终查看文件的内容。如果是像.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的情况下执行,否则它将跳过该部分。

最新更新