Любой возможный способ программно сохранить в другую папку, отличную от указанной папки загрузки? - PullRequest
0 голосов
/ 09 ноября 2011

Я занимаюсь разработкой веб-приложения ASP.NET, в котором таблица преобразуется в электронную таблицу 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 ]

3 голосов
/ 09 ноября 2011

Нет. Веб-приложение ничего не знает о локальной файловой системе. (Действительно, кроме заголовка content-disposition, протокол HTTP даже не знает, что такое «файл».)

То, что вы делаете (кроме полного пути в заголовке content-disposition), правильно. Стандартный способ отправки файла веб-клиенту - установить этот заголовок и записать содержимое файла в вывод. То, что происходит на стороне клиента, полностью зависит от веб-браузера. Если веб-браузер пользователя настроен на автоматическое сохранение загрузок в определенную папку без запроса, вы не сможете изменить это с сервера.

1 голос
/ 09 ноября 2011

нет, если файл сохраняется на компьютере пользователя, определяется веб-браузером, он не имеет ничего общего с веб-сервером.подумайте об этом, вы не знаете, в какой операционной системе работает посетитель сайта, не говоря уже о каком-то произвольном пути, который вы указываете на сервере.

...