2009-08-31 5 views
2

Я загрузил текстовый файл в свою базу данных в поле «Изображение». Проблема в том, что я пытаюсь восстановить файл (чтобы пользователь мог загрузить его по клику по ссылке). Когда я пытаюсь загрузить его, он просто заполняется содержимым веб-страницы (весь html заполняется в текстовый файл). Я рассматриваю это как ошибку с тем, как я пытаюсь загрузить файл. Невозможно ли передать содержимое в файл, не сохраняя его во временном файле?Сохранить файл из поля изображения базы данных

Код, который я использую, показан ниже. UploadFiles мой класс, который содержит данные, идентификатор, имя и т.д.

public void DownloadUploadedFile(Page sender, UploadFiles uf) 
{ 
    sender.Response.ContentType = uf.FileType; // the binary data 
    sender.Response.AddHeader("Content-Disposition", "attachment; filename=" + uf.FileName); 
    sender.Response.BinaryWrite(uf.FileData); 
} 

ответ

2

Это звучит, как вы получили слишком большую часть остальной части страницы, идущую к клиенту. Вам нужно очистить ответ и затем закрыть его; попробуйте:

sender.Response.Clear(); 
sender.Response.ContentType = uf.FileType; // the binary data 
sender.Response.AddHeader("Content-Disposition", "attachment; filename=" 
     + uf.FileName); 
sender.Response.BinaryWrite(uf.FileData); 
sender.Response.Close(); 

В качестве альтернативы, используйте обработчик (ASHx), чтобы сделать это - так, что не включает в себя регулярные страницы разметки.

+0

Я добавил .Clear() и .close(), но теперь он не просит меня сохранять или открывать файл и просто продолжает загружаться навсегда. Я думаю, что это потому, что я закрываю файл, прежде чем пользователь сможет его сохранить? – Dofs

+0

Я узнал, что должен написать sender.Respons.Close(), а затем я не получил весь html. Но теперь файл просто содержит строку «System.Byte []», а не фактический контент? – Dofs

+0

Я напишу новую тему с новым вопросом. – Dofs