以编程方式保存到指定的下载文件夹以外的其他文件夹的任何可能方法?

时间:2011-11-08 21:25:43

标签: c# asp.net file save

我正在开发一个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实际上是在我的代码中存储文件路径+文件名。有什么方法可以指定文件路径吗?

我能想到的唯一其他解决方案是,如果我在页面上创建某种文件并右键单击+另存为。这是一个不好的选择吗?还有其他人吗?

2 个答案:

答案 0 :(得分:3)

没有。 Web应用程序对本地文件系统一无所知。 (实际上,除了content-disposition标头之外,HTTP协议甚至不知道“文件”是什么。)

您正在做的事情(除了content-disposition标题中的完整路径)是正确的。将文件发送到Web客户端的标准方法是设置该标头并将文件内容写入输出。客户端发生的事情完全取决于Web浏览器。如果用户的Web浏览器设置为在没有提示的情况下自动将下载保存到特定文件夹,则无法从服务器更改该文件夹。

答案 1 :(得分:1)

不,文件保存在用户计算机上的位置由网络浏览器决定,它与网络服务器无关。想一想,你不知道网站访问者正在运行什么操作系统,更不用说你在服务器上指定的任意路径了。