Подтвердить что ты не робот

Запрос пользователя на сохранение/открытие файла в ASP.NET С#

Не так сложно найти, как это сделать. В основном я пытаюсь взять строку и позволить клиенту сохранить ее, когда они нажимают кнопку. Он должен появиться с помощью диалога "Сохранить/Открыть". Никаких дополнительных звонков и свистков. Это не ракетостроение ((так я и думал).

Кажется, есть много разных способов (StreamWriter, HttpResponse и т.д.), но ни один из примеров, с которыми я не смог найти работу или объяснить, что происходит. Спасибо заранее.

Пример одного из многих блоков кода, которые я нашел...

(Это просто пример, не стесняйтесь основывать свой ответ на это.)

String FileName = "FileName.txt";
String FilePath = "C:/...."; //Replace this
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "text/plain";
response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
response.TransmitFile(FilePath);
response.Flush();
response.End();

Строка 2 говорит о замене этой строки. Как? Этот код рекламировался как создание диалога. Мне не нужно устанавливать путь в коде, правильно?

РЕДАКТИРОВАТЬ: окончательный результат (снова отредактирован, Delete должен быть до конца();)

        string FilePath = Server.MapPath("~/Temp/");
        string FileName = "test.txt";

        // Creates the file on server
        File.WriteAllText(FilePath + FileName, "hello");

        // Prompts user to save file
        System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
        response.ClearContent();
        response.Clear();
        response.ContentType = "text/plain";
        response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
        response.TransmitFile(FilePath + FileName);
        response.Flush();

        // Deletes the file on server
        File.Delete(FilePath + FileName);

        response.End();
4b9b3361

Ответ 1

Строка 2 (FilePath) указывает путь к файлу на сервере

Строка 8:

response.TransmitFile(FilePath);

Передает этот конкретный файл клиенту, и именно это вызывает диалог сохранения.

Если вы не передаете файл, я не уверен, что диалог появится вообще (даже если вы установили заголовок)

В любом случае, я думаю, строка 8 должна выглядеть так:

    response.TransmitFile(FilePath + FileName);

Ответ 2

В браузере будет диалоговое окно по умолчанию, если оно найдет Response как некоторый файл. Если вы хотите, чтобы браузер отображал это диалоговое окно по умолчанию, все, что вам нужно сделать, это отправить ответ браузеру как файл, который вы можете сделать несколькими способами:

  • Если это статический файл,

    • Лучший способ - просто указать путь файла в привязном теге href (очевидно, если у вас нет проблем с безопасностью)
    • Просто следуйте вашему ответу, как это делается в вашем примере.
    • Другие способы, на которые вы можете ссылаться здесь 4 способа отправить PDF из asp.net
  • Если это динамический файл, который нужно создать во время выполнения, вы можете сделать трюк, сгенерировать файл из фильтра, поместить его в некоторую временную папку на сервере, прочитать его как статический файл, как упомянутых выше.

Ответ 3

FilePath должен указывать на файл, который вы хотите отправить клиенту. Это путь на сервере.

Ответ 4

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

byte[] bytesPDF = System.IO.File.ReadAllBytes(@"C:\sample.pdf");

        if (bytesPDF != null)
        {

            Response.AddHeader("content-disposition", "attachment;filename= DownloadSample.pdf");
            Response.ContentType = "application/octectstream";
            Response.BinaryWrite(bytesPDF);
            Response.End();
        }