Принудительно скачать ASP.Net - PullRequest
       11

Принудительно скачать ASP.Net

5 голосов
/ 14 февраля 2012

В ASP.Net (с C #) я пытаюсь создать файл .DAT с простым текстом в нем и отправить его в браузер и принудительно загрузить.Я пробовал несколько вещей, но я не могу заставить его работать.В моем aspx-файле есть ImageButton

<asp:ImageButton ID="btnSave" runat="server" CausesValidation="False" ImageUrl="~/Images/Stages/Database/Save.png" OnClick="btnSave_OnClick" Width="26px" />

. В методе OnClick я пытаюсь создать файл и отправить его в браузер.

protected void btnSave_OnClick(object sender, EventArgs e)
{
    string file = "test.dat";
    string fileName = "~\\Stages\\Broekx\\Databanken\\" + file;

    FileStream fs = new FileStream(MapPath(fileName), FileMode.Open);
    long cntBytes = new FileInfo(MapPath(fileName)).Length;
    byte[] byteArray = new byte[Convert.ToInt32(cntBytes)];
    fs.Read(byteArray, 0, Convert.ToInt32(cntBytes));
    fs.Close();

    ImageButton btnSave = (ImageButton)FormViewStagesDummy.FindControl("btnSave");
    btnSave.Visible = false;

    File.Delete(Server.MapPath(fileName));

    if (byteArray != null)
    {
        this.Response.Clear();
        this.Response.ContentType = "text/plain";
        this.Response.AddHeader("content-disposition", "attachment;filename=" + file);
        this.Response.BinaryWrite(byteArray);
        this.Response.End();
        this.Response.Flush();
        this.Response.Close();
    }
}

Файл test.dat существует в правильной папке и должен быть удален после того, как он был прочитан в байтах.Я пробовал это, не удаляя файл, и это тоже не будет работать.

После нажатия btnSave кнопка должна быть скрыта, поэтому я установил для параметра Visible значение false.

I 'Мы также пробовали это с типом контента "application / octet-stream" или с файлом PDF и типом контента "application / pdf", но ничего не работает.Страница загружается нормально, и файл не загружается.

Ответы [ 2 ]

3 голосов
/ 14 февраля 2012

Правильно ли указан путь к строке файла?

this.Response.AddHeader("content-disposition", "attachment;filename=" + file);

Разве это не должно быть имя файла?

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

т.е. Звоните

File.Delete(Server.MapPath(fileName));

после ответа.

Вы должны попробовать:

Response.TransmitFile( Server.MapPath(fileName) );
Response.End();

TransmitFile очень эффективен, потому что он в основном разгружает потоковую передачу файлов в IIS, в том числе потенциально вызывает кэширование файла в кэше Kernal (на основе правил кэширования IIS). Response.End ();

0 голосов
/ 14 февраля 2012
                Response.Clear();
                Response.ClearContent();
                Response.ClearHeaders();
                Response.ContentType = "text/plain";
                Response.AppendHeader("Content-Disposition", "attachment; filename = " + fileName);
                Response.TransmitFile(Server.MapPath("~/foldername/" + fileName));
                Response.End();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...