Отрезать двоичный заголовок у пришедшего файла.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Отрезать двоичный заголовок у пришедшего файла.

Сообщение ALX_2002 » 14.11.2005 (Пн) 20:01

Челы. Я получаю файл в таком виде

-----------------------------7d52fd35901a8
Content-Disposition: form-data; name="attach1"; filename="C:\1.zip"
Content-Type: application/x-zip-compressed

Двоичное тело файла

-----------------------------7d52fd35901a8--


Приходит вся эта бадяга в BINARY. В том числе и сам заголовок.

Посоветуйте пожалуйста - как написать код, чтобы разобрать эти заголовки, и вычленить тело самого файла. :oops: Запарился.

Split заюзать не смог. Оказалось он только с текстом работает. :shock:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.11.2005 (Пн) 20:13

Хм.
Ышшо один :)

В чём, хотелось бы узнать, принципиальное отличие строки от... эээ... бинарных данных? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 14.11.2005 (Пн) 20:16

Дык понятное дело, что в String могут быть любые данные, но SPLIT почему то неправильно принимает в себя строку. Он двоичные данные конвертит как то. Короче у него в строке идёт - "Я идиот! Убейте меня, кто-нибудь!??"

:(

В результате не получается порубить строку на массив. :oops:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.11.2005 (Пн) 20:18

А, собственно, почему там должно отображаться что-то читаемое?
Там тело файла. Непечатаемыми символами.
К примеру.

Как рубим?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 14.11.2005 (Пн) 20:24

:) Если не сложно - стукни мне в аську 252505765. Буду ооочень благодарен.

Рубил так

Код: Выделить всё
ARR=Split(REQUESTDATA,chrB(13))


и так

Код: Выделить всё
ARR=Split(REQUESTDATA,chrB(13),-1,0)



----------------------------------------------------------------------------
До этого почитал в MSDN. Там нашёл на счёт параметра Compare

Описание

Возвращает одномерныймассив, основанный на нуле, содержащий указанное число подстрок.

Синтаксис

Split(expression[, delimiter[, count[, compare]]])

Синтаксис функции Split содержит следующие элементы:

Часть Описание
expression Обязательный.Строковое выражение, содержащее подстроки и разделители. Если параметр expression является строкой нулевой длины (""), функция Split возвращает пустой массив, не содержащий ни элементов, ни данных.
delimiter Необязательный. Строковый символ, используемый для задания границ подстрок. Если параметр опущен, в качестве разделителя применяется символ пробела (" "). В том случае, когда параметр delimiter является пустой строкой, возвращается массив с единственным элементом, содержащим полную строку expression.
coun Необязательный. Число возвращаемых подстрок; значение –1 указывает на то, что возвращаются все подстроки.
compare Необязательный. Числовое значение, задающее тип сравнения, применяемый при оценке подстрок. См. значения в разделе «Установки».


Установки

Параметр compare может иметь следующие значения:

Константа Значение Описание
vbUseCompareOption –1 Сравнение выполняется с применением установки, задаваемой оператором Option Compare.
vbBinaryCompare 0 Выполняется побитовое сравнение.
vbTextCompare 1 Выполняется текстовое сравнение.
vbDatabaseCompare 2 Только для Microsoft Access. Сравнение выполняется на основе информации, хранящейся в базе данных пользователя.
[/b]

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 15.11.2005 (Вт) 23:40

З а д о л б а л с я..... Весь код через ( )( )
| || |

:evil:

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 16.11.2005 (Ср) 11:09

Сбрось в файл то, что получаешь и выложи сюда вместе с методом получения.
Лучший способ понять что-то самому — объяснить это другому.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 16.11.2005 (Ср) 18:43

2 Antonariy: :shock: Я же в первом посте всё написал ???

Получаю через Request.BinaryRead(Request.TotalBytes)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.11.2005 (Ср) 19:43

Вот все эти тоталбайтс сюда выложи.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 17.11.2005 (Чт) 9:52

Вот именно.
Лучший способ понять что-то самому — объяснить это другому.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 17.11.2005 (Чт) 13:15

Без проблем. :) Буду рад, если потестите. :)

Вот ссылка на скрипт

http://b.domaindlx.com/Xameleon/upload.asp

Вот исходный код скрипта

Код: Выделить всё
<form name="frmSend" method="POST" enctype="multipart/form-data">
File : <input name=attach1 type=file size=35><br>
<input style="margin-top:4" type=submit value="Upload">
</form>
<%

Dim TotalBytes

TotalBytes=Request.TotalBytes

If TotalBytes > 0 then
If Not Response.IsClientConnected Then Response.End
Response.BinaryWrite Request.BinaryRead(TotalBytes)
Response.Flush
End if


%>


Вот что получаю, когда отправляю картинку на ASP


-----------------------------7d52b81a50550 Content-Disposition: form-data; name="attach1"; filename="C:\Documents and Settings\market01x\Мои документы\Мои рисунки\flowers_015.jpg" Content-Type: image/pjpeg яШяа

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 17.11.2005 (Чт) 19:16

Где то, что ты получаешь?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 17.11.2005 (Чт) 22:20

2 Gserg:

В предыдущем посте я написал, что


Вот что получаю, когда отправляю картинку на ASP

-----------------------------7d52b81a50550 Content-Disposition: form-data; name="attach1"; filename="C:\Documents and Settings\market01x\Мои документы\Мои рисунки\flowers_015.jpg" Content-Type: image/pjpeg яШяа


Видишь на хвосте - "яШяа" это те даннные которые пришли. Отстальны символы нечитабельны.... Поэтому пришедшие данные такие короткие.


P.S Плииииз. Спасай. :oops: Я до сих пор с этой хренью парюсь. Я так понял в ASP нет GetRequestHeader. А жаль :(

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 18.11.2005 (Пт) 14:16

Значит так. Создаешь рекордсет с полем типа binary, загоняешь в него Request.BinaryRead(Request.TotalBytes), где можешь делать с массивом что угодно, он никуда не денется. Находить начало тела файла (2й пробел после "Content-Type:" + 1), создаешь ADODB.Stream, загоняешь в него (st.write) этот массив, становишься на позицию которую вычислил (st.Position) и делаешь Response.BinaryWrite st.Read
Лучший способ понять что-то самому — объяснить это другому.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 18.11.2005 (Пт) 14:17

Значит так. Создаешь рекордсет с полем типа binary, загоняешь в него Request.BinaryRead(Request.TotalBytes), где можешь делать с массивом что угодно, он никуда не денется. Находить начало тела файла (2й пробел после "Content-Type:" + 1), создаешь ADODB.Stream, загоняешь в него (st.write) этот массив, становишься на позицию которую вычислил (st.Position) и делаешь Response.BinaryWrite st.Read
Лучший способ понять что-то самому — объяснить это другому.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: YaCy [Bot], Yandex-бот и гости: 185

    TopList