1

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

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

我遇到了一个解决方案:

dim wc as new WebClient ()

wc.downloadFile(src,dest)

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

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

4

1 回答 1

5

在 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 应用程序中知道它。因此,您将不得不寻找其他方法来获取此信息,例如要求客户在某个文本框或其他字段中输入它。

于 2012-12-24T10:52:53.543 回答