Как назначить имя файла, который пользователь загружает через загрузчик ASHX? - PullRequest
0 голосов
/ 04 октября 2011

Я впервые пишу код, который позволяет пользователю загружать файл, загруженный другим пользователем.

Я написал ASHX-файл download.ashx с кодом, который выглядит следующим образом:

s = context.Request.QueryString.ToString();
byte[] buffer = new ReplacementTicketFileIO().GetSpecifiedFile(s);
context.Response.BinaryWrite(buffer);
context.Response.Flush();
context.Response.End();

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

Я бы хотел сделать две вещи:

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

Например, если пользователь нажимает на файл download.ashx? Connectedfile = car.pdf, я бы хотел, чтобы браузер по умолчанию использовал car.pdf для имени этого файла.

2) Я бы хотел, чтобы браузер по умолчанию сохранял ссылку, а не открывал ссылку в окне браузера.

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

Ответы [ 2 ]

2 голосов
/ 04 октября 2011

Установить HTTP-заголовок Content-Disposition. Э.Г.

Content-Disposition: attachment; filename=hello.jpg

Вы можете сделать это в C #, используя:

 Response.AddHeader("Content-Disposition", "attachment; filename=hello.jpg");
0 голосов
/ 04 октября 2011

Вот что у меня есть для файлов Excel, и я полагаю, что оно вызывает загрузку, а не новое окно.Есть свойство страницы для QueryString.Вам просто нужно захватить QueryString и использовать его в этом коде, а также определить тип содержимого.String.Format даст вам чистый код.

private string _ExcelFilename
{
        get
{
    return (Request.QueryString["xls"] != null) ? Request.QueryString"xls"] : "bis";
}
}

Page.Response.Clear();
Page.EnableViewState = false;
Page.Response.Clear();
Page.Response.ContentType = "application/vnd.ms-excel";
Page.Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}_{1}.xls", _ExcelFilename, DateTime.Now.ToString("yyyyMMdd")));
Page.Response.Write(excel);
Page.Response.Flush();
Page.Response.End();
...