| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка под ASP.NET > чтение двоичных данных из базы |
| Автор: Doss 12.6.2013, 12:24 | ||||
| Уважаемые коллеги, помогите разобраться! Цель: Дать возможность клиенту читать содержимое файлов, которые хроняться в БД в двоичном виде. Так вот, не могу понять, как я должен передать эти двоичные данные? чтобы клиент их просто открыл и прочел! Если я правильно понимаю, то вначале я считываю свои дв данные из базы методом FileStream и записываю на локальный диск, после с помощью BinaryWriter их оттуда (с диска) считываю в byte [] и должен с названием самого файла направить клиенту с помощью System.Web.HttpResponse. И наконец я удалил то, что записал на диск сервера. Но возникли вопросы: Вот я считал с базы, записал на диск и впихнул в byte []
Так вот, накопал тут http://forum.vingrad.ru/topic-69471.html что можно прочесть и это делать так:
Но один вопрос: что я должен передать в первый параметр System.Web.HttpResponse response? Остальные два я понял. Добавлено через 1 минуту и 20 секунд Да, еще, клиент должен предворительно скачать файл и только после сохранения на локальном может просмотреть да? |
| Автор: Doss 12.6.2013, 13:43 | ||||||
| так как мне не записывать? Ведь я достаю из базы предварительно записав в writer = new BinaryWriter(stream); А в конструктор BinaryWriter инициализирую через stream = new FileStream, который наследуется из IO, Это я должен OleDbDataReader datareader = cmd.ExecuteReader(CommandBehavior.SequentialAccess) сразу запихнуть в outByte[] но как? Временно решил сделать так
Но возникает еще одна проблема, клиенты нормально получают файлы и сохраняют их. Но открыть не могут. файлы типа не правильно кодированы и т.д. Да, кстати в данном коде
все работает нормально только до команды response.End(); после выдает исключение, которое решается следующей заменой
Ссылка на данную ошибку http://support.microsoft.com/kb/312629 |
| Автор: Doss 12.6.2013, 14:14 | ||
| Кстати, response.Write(contents); заменил на BinaryWrite
Стала выдавать что файл поврежден и не может быть востановлен, в чем причина? |
| Автор: Doss 12.6.2013, 15:13 | ||
| В общем ошибка при открытии файла в следующем: Нужно было заменить response.Write(contents); на response.BinaryWrite(contents); что я и сделал и обязательно добавить response.BufferOutput = true; Все остальное может оставаться или отчасти не присутствовать№ Это точно, проверял!!!
Ну а как впихнуть дв данные из базы сразу в метод пока не решил (работает ведь, глаза уже на лбу!!!! Нужен сникерс и натуральная слеза). Думаю ответит кто нибудь кто уже имеет опыт..... |
| Автор: Экскалупатор 12.6.2013, 15:23 | ||||
наверное проблема не решилась, думаю проблема может быть в том что не весь файл пришел. Какое было исключение? попробуй http://msdn.microsoft.com/ru-ru/library/system.web.httpresponse.writefile.aspx для начала я бы вернул из приложения просто файл, нормальный, реально существующий и который нормально открывается. если все ок, то проблема скорее всего в том что ты что то теряешь при сохранении или запросе из базы(ставлю на базу). второе это надо открыть тот файл который получается после выборки из базы и сохранении на диск, но до отправки, если с ним все ок, то из базы выбирается нормально, и значит что то в самом процессе отправки. в обще надо сначала локализовать проблему. http://msdn.microsoft.com/ru-ru/library/system.io.streamreader.aspx ReadToEnd() - читает до конца потока. |