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

使用VB.NET将文件下载到ASP.NET中的客户端PC,asp.net,vb.net,download,dialog,Asp.net,Vb.net,Download,Dialog,我正在开发一个只能在我们组织内部访问的网站 我想实现一个功能,客户端将从服务器下载一个文件(Visio file*.vsd),并将其保存到任何位置 我发现了一个解决方案: dim wc as new WebClient () wc.downloadFile(src,dest) 但是,此解决方案不会提示“另存为”对话框(,我希望在应用程序中显示该对话框)。此外,我应该知道客户端PC上保存文件的路径,以便将该路径保存到数据库中 (供参考:我想实现与VSS类似的功能)在ASP.NET中如果要将文件

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

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

我发现了一个解决方案:

dim wc as new WebClient ()

wc.downloadFile(src,dest)
但是,此解决方案不会提示“另存为”对话框(,我希望在应用程序中显示该对话框)。此外,我应该知道客户端PC上保存文件的路径,以便将该路径保存到数据库中


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

在ASP.NET中如果要将文件流式传输到客户端,并让“另存为”对话框提示用户选择位置,则必须设置正确的内容类型和内容处置响应标题,然后将文件直接写入响应流:

例如:

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应用程序中了解这些信息。所以你必须找到其他方法来获取这些信息,例如,要求客户端在某个文本框或其他字段中输入文件。

在ASP.NET中,如果要将文件流式传输到客户端,并让“另存为”对话框提示用户选择位置,则必须设置正确的内容类型和内容处置响应标题,然后将文件直接写入响应流:

例如:

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应用程序中了解这些信息。因此,您必须找到获取此信息的其他方法,例如,要求客户在某个文本框或其他字段中输入此信息。

@NK-尝试后,您会怎么做?不投票,不接受?如果工作没有评论,或者你面临什么其他问题?我试过了。。。。我在设置内容类型时遇到了问题。我会告诉你我哪里出了问题。谢谢你遇到了什么问题?你能再精确一点吗?如果你不提供更多的细节,这真的很难帮上忙。问题和标签都指定了vb,那么你为什么要发布C#代码作为答案?@NK-在你尝试之后,会是什么?不投票,不接受?如果工作没有评论,或者你面临什么其他问题?我试过了。。。。我在设置内容类型时遇到了问题。我会告诉你我哪里出了问题。谢谢你遇到了什么问题?你能再精确一点吗?如果你不提供更多的细节,这真的很难帮助你。问题和标签都指定了vb,那么你为什么要发布C代码作为答案呢?