我正在开发一个只能在我们组织内访问的网站。
我想实现一种功能,客户端将从服务器下载文件(Visio File *.vsd)
并将其保存到任何位置。
我遇到了一个解决方案:
dim wc as new WebClient ()
wc.downloadFile(src,dest)
但是,此解决方案不会提示另存为对话框(我想要在我的应用程序中)。此外,我应该知道客户端PC保存文件的路径,以便将路径保存在数据库中。
(供参考:我想实现类似于 VSS 的功能。)
答案 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应用程序中了解它。因此,您必须找到获取此信息的其他方式,例如要求客户在某个文本框或其他字段中输入该信息。