以编程方式保存到指定下载文件夹以外的其他文件夹的任何可能方法
本文关键字:文件夹 任何可 方法 其他 下载 方式 编程 保存 | 更新日期: 2023-09-27 18:13:46
我正在开发一个ASP。NET Web应用程序,其中表格可转换为excel电子表格。我想让用户选择保存在下载部分以外的其他地方。我意识到这很可能是被禁止的,但也许有某种类/机制由ASP.net框架促进。
下面是我当前的代码:
protected void saveDataButton_Click(Object sender, EventArgs e)
{
SaveFileDialog browser = new SaveFileDialog();
string fileName;
if (browser.ShowDialog() == DialogResult.OK)
{
fileName = browser.FileName;
}
else
return;
DataTable table = (DataTable)Session["tableData"];
HttpContext context = HttpContext.Current;
context.Response.Clear();
context.Response.ContentType = "text/csv";
context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName + ".csv");
foreach (DataColumn column in table.Columns)
{
context.Response.Write(column.ColumnName + ";");
}
context.Response.Write(Environment.NewLine);
foreach (DataRow row in table.Rows)
{
for (int i = 0; i < row.ItemArray.Length; i++)
{
context.Response.Write(row[i].ToString().Replace(";", string.Empty) + ";");
}
context.Response.Write(Environment.NewLine);
}
context.Response.End();
}
我知道在这种情况下我使用fileName的方式是错误的,因为fileName实际上是在我的代码中存储文件路径+文件名。有办法指定文件路径吗?
我能想到的唯一解决方案是,如果我在页面上创建了某种文件,并让它们右键单击+另存为。这是一个糟糕的选择吗?还有其他的吗?
No。web应用程序对本地文件系统一无所知。(事实上,除了content-disposition
标头,HTTP协议甚至不知道什么是"文件"。)
你正在做的(除了在content-disposition
头中有完整的路径)是正确的。将文件发送到web客户端的标准方法是设置该标头并将文件内容写入输出。在客户端发生的事情完全取决于web浏览器。如果用户的web浏览器设置为自动将下载保存到特定文件夹而不提示,那么您无法从服务器更改。
不,文件保存在用户计算机上的位置是由web浏览器决定的,它与web服务器无关。考虑一下,您不知道站点访问者运行的是什么操作系统,更不用说您在服务器上指定的任意路径了。