使用VB.NET将文件下载到ASP.NET中的客户端PC

时间:2012-12-24 10:31:15

标签: asp.net vb.net download dialog

我正在开发一个只能在我们组织内访问的网站。

我想实现一种功能,客户端将从服务器下载文件(Visio File *.vsd)并将其保存到任何位置。

我遇到了一个解决方案:

dim wc as new WebClient ()

wc.downloadFile(src,dest)

但是,此解决方案不会提示另存为对话框(我想要在我的应用程序中)。此外,我应该知道客户端PC保存文件的路径,以便将路径保存在数据库中。

(供参考:我想实现类似于 VSS 的功能。)

1 个答案:

答案 0 :(得分:4)

在ASP.NET中,如果要将文件流式传输到客户端并让“另存为”对话框提示用户选择一个位置,则必须设置正确的Content-Type和Content-Disposition响应头,然后编写直接归档到响应流:

例如:

protected void SomeButton_Click(object sender, EventArgs e)
{
    // TODO: adjust the path to the file on the server that you want to download
    var fileToDownload = Server.MapPath("~/App_Data/someFile.pdf");

    Response.ContentType = "application/octet-stream";
    var cd = new ContentDisposition();
    cd.Inline = false;
    cd.FileName = Path.GetFileName(fileToDownload);
    Response.AppendHeader("Content-Disposition", cd.ToString());

    byte[] fileData = System.IO.File.ReadAllBytes(fileToDownload);
    Response.OutputStream.Write(fileData, 0, fileData.Length);
}

现在,当此代码执行时,该文件将被发送到客户端浏览器,该浏览器将提示将其保存在其计算机上的特定位置。

不幸的是,出于安全原因,您无法捕获客户端选择将文件存储在其计算机上的目录。这些信息永远不会通过网络传输,您无法在ASP.NET应用程序中了解它。因此,您必须找到获取此信息的其他方式,例如要求客户在某个文本框或其他字段中输入该信息。