Я использую ASP.NET 4, EF 4 и FILESTREAM в SQL 2008 для добавления / чтения файлов в БД.Я могу загружать файлы просто отлично, но я не могу получить файлы так, как я хочу.Вот что я делаю -
- У меня есть сетка, которая отображает список файлов.Каждый элемент строки представляет собой файл с установленными CommandName и CommandArgument.
- Пользователь нажимает на любой из этих файлов, и я фиксирую это событие в событии RowCommand.На этом этапе я получаю идентификатор файла и извлекаю байт [] из БД.Как отобразить стандартное окно загрузки для пользователя, чтобы сохранить или отменить загрузку?
Я могу записать поток во временный файл (используя System.IO.File.WriteAllBytes), а затем выполнитьServer.Transfer для временного файла, но я думаю, что это ненужный шаг.Есть ли способ, я могу прочитать байты непосредственно в память, затем установить ContentType / MimeType и позволить пользователю сохранить файл?
Я понимаю, что доступ к файлу FILESTREAM с помощью T-SQL медленнее, чем доступто же самое с использованием WIN32 API (с использованием комбинации новых SystemFile.PathName () и Impersonation), но EF4 ускоряет работу с SQL, поэтому я иду по этому маршруту.
Вот код -
var file = db.Storage.Single(f => f.ID.Equals(fileID)); // fileID is set in CommandArgument
// file.Contents has the byte [].
// display a standard file download box.
Спасибо за любую помощь!