![]() |
|
Модераторы: gambit |
![]()
|
|
| Doss |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 5.10.2007 Репутация: нет Всего: нет |
Уважаемые коллеги, помогите разобраться!
Цель: Дать возможность клиенту читать содержимое файлов, которые хроняться в БД в двоичном виде. Так вот, не могу понять, как я должен передать эти двоичные данные? чтобы клиент их просто открыл и прочел! Если я правильно понимаю, то вначале я считываю свои дв данные из базы методом FileStream и записываю на локальный диск, после с помощью BinaryWriter их оттуда (с диска) считываю в byte [] и должен с названием самого файла направить клиенту с помощью System.Web.HttpResponse. И наконец я удалил то, что записал на диск сервера. Но возникли вопросы: Вот я считал с базы, записал на диск и впихнул в byte []
Так вот, накопал тут Чтение файла что можно прочесть и это делать так:
Но один вопрос: что я должен передать в первый параметр System.Web.HttpResponse response? Остальные два я понял. Добавлено через 1 минуту и 20 секунд Да, еще, клиент должен предворительно скачать файл и только после сохранения на локальном может просмотреть да? |
||||
|
|||||
| Экскалупатор |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
тебе надо передать объект который является ответом на текущий запрос. можно взять из входящего Request Request.GetResponse()
на примере онлайн фильмов и музыки видно что не обязательно, вопрос в том что бы софт на стороне пользователя мог работать с потоком приходящих от сервера данных, и тогда можно будет просматривать в процессе. если такого софта нету, то да, придется сначала скачать. еще, тебе не обязательно записывать на диск байты, а потом их читать и в конце удалять файл, у тебя второй передаваемый параметр это массив этих самых байтов, пихай в него то что ты достал из базы и сразу пиши в выходной поток. |
||||
|
|||||
| Doss |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 5.10.2007 Репутация: нет Всего: нет |
так как мне не записывать?
Ведь я достаю из базы предварительно записав в writer = new BinaryWriter(stream); А в конструктор BinaryWriter инициализирую через stream = new FileStream, который наследуется из IO, Это я должен OleDbDataReader datareader = cmd.ExecuteReader(CommandBehavior.SequentialAccess) сразу запихнуть в outByte[] но как? Временно решил сделать так
Но возникает еще одна проблема, клиенты нормально получают файлы и сохраняют их. Но открыть не могут. файлы типа не правильно кодированы и т.д. Да, кстати в данном коде
все работает нормально только до команды response.End(); после выдает исключение, которое решается следующей заменой
Ссылка на данную ошибку решение проблемы |
||||||
|
|||||||
| Doss |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 5.10.2007 Репутация: нет Всего: нет |
Кстати,
response.Write(contents); заменил на BinaryWrite
Стала выдавать что файл поврежден и не может быть востановлен, в чем причина? |
|||
|
||||
| Doss |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 5.10.2007 Репутация: нет Всего: нет |
В общем ошибка при открытии файла в следующем:
Нужно было заменить response.Write(contents); на response.BinaryWrite(contents); что я и сделал и обязательно добавить response.BufferOutput = true; Все остальное может оставаться или отчасти не присутствовать№ Это точно, проверял!!!
Ну а как впихнуть дв данные из базы сразу в метод пока не решил (работает ведь, глаза уже на лбу!!!! Нужен сникерс и натуральная слеза). Думаю ответит кто нибудь кто уже имеет опыт..... |
|||
|
||||
| Экскалупатор |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
наверное проблема не решилась, думаю проблема может быть в том что не весь файл пришел. Какое было исключение? попробуй HttpResponse.WriteFile - метод для начала я бы вернул из приложения просто файл, нормальный, реально существующий и который нормально открывается. если все ок, то проблема скорее всего в том что ты что то теряешь при сохранении или запросе из базы(ставлю на базу). второе это надо открыть тот файл который получается после выборки из базы и сохранении на диск, но до отправки, если с ним все ок, то из базы выбирается нормально, и значит что то в самом процессе отправки. в обще надо сначала локализовать проблему. StreamReader ReadToEnd() - читает до конца потока. Это сообщение отредактировал(а) Экскалупатор - 12.6.2013, 15:33 |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка под ASP.NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |