ASP.NET преобразованный файл хранится на диске сервера, а не на ПК пользователя - PullRequest
0 голосов
/ 17 февраля 2012

Я использую VS2005 c #.

У меня есть эта функция для преобразования текстовых файлов с разделителями трубы в формат Excel.

Файлы будут сохранены в C: \ ofПК пользователя .

Однако, когда я развернул свое веб-приложение на тестовом сервере, вместо этого файлы сохраняются в C: \ тестового сервера.

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

if (TextFile.HasFile)
    {
        string strFileName = Server.HtmlEncode(TextFile.FileName);

        string strExtension = Path.GetExtension(strFileName);

            string activeDir = @"C:\";

            string newPath = System.IO.Path.Combine(activeDir, "App_Converted");

            System.IO.Directory.CreateDirectory(newPath);

            string strExcelOutputFilename = "C:/App_Converted/" + xlExtension;

            using (StreamWriter outputWriter = new StreamWriter(File.Create(strExcelOutputFilename)))
            {
                StreamReader inputReader = new StreamReader(TextFile.FileContent);
                while (inputReader.Peek() >= 0)
                {
                    string[] myInputFields = inputReader.ReadLine().Split(new char[] { '|' });
                    List<string> myOutputFields = new List<string>();

                    foreach (string aField in myInputFields)
                    {
                        string oField = aField;
                        if (oField.Contains(","))
                            oField = "\"" + oField + "\"";

                            myOutputFields.Add(oField);
                    }

                    outputWriter.WriteLine(string.Join(",", myOutputFields.ToArray()));

                }
                inputReader.Close();
                UploadStatusLabel.Text = "File stored at [C:/App_Converted/] as file name [namelist.csv]";
                Response.Clear();
                Response.ContentType = "application/vnd.xls";
                Response.AddHeader("Content-Disposition", "attachment;filename=namelist.csv");

                StringWriter swriter = new StringWriter();
                HtmlTextWriter hwriter = new HtmlTextWriter(swriter);

                Response.Write(swriter.ToString());
                Response.End();
                return;
            }

РЕДАКТИРОВАТЬ:

Обновлен код с окнами сохранения.Однако я не знаю, как связать конвертированный файл с окнами сохранения.Нужна помощь здесь.Выше мой обновленный код.

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

вместо:

    Response.ContentType = "application/vnd.xls";
    Response.AddHeader("Content-Disposition", "attachment;filename=namelist.csv");

    StringWriter swriter = new StringWriter();
    HtmlTextWriter hwriter = new HtmlTextWriter(swriter);

    Response.Write(swriter.ToString());

используйте этот фрагмент

    Response.ContentType = "application/vnd.xls";
    Response.AddHeader("Content-Disposition", "attachment;filename=namelist.csv");
    string filePath = @"paste a path of your file here";
    Response.WriteFile(filePath);

ps и, пожалуйста, прочитайте вопрос, который я написал в комментарииОн точно отвечает на ваш вопрос и охватывает многие аспекты принудительной загрузки файла с сервера

0 голосов
/ 17 февраля 2012

Вы не можете сохранить файл на клиентском компьютере описанным выше способом. Вы можете сохранить его на сервере, как здесь, и предоставить (href) ссылку на клиента. Или вы можете записать файл как ответ обратно в браузер, который либо откроет его, либо предложит варианты сохранения. использовать HttpResponse.TransmitFile

...