ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Обработка multipart данных
  #1  
Старый 15.09.2007, 10:08
Joker-jar
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме:
4172659

Репутация: 646


Отправить сообщение для Joker-jar с помощью ICQ
По умолчанию Обработка multipart данных

Позарез требуется реализация обработки multipart данных на Delphi или C++.

Пример данных:

------------zqaJEx7bclBmbt00xtw1Cp
Content-Disposition: form-data; name="textfile"; filename="1.bmp"
Content-Type: image/bmp

binary-data
------------zqaJEx7bclBmbt00xtw1Cp
Content-Disposition: form-data; name="binfile"; filename="Превед.txt"
Content-Type: text/plain

Hello, world
------------zqaJEx7bclBmbt00xtw1Cp--


У меня есть boundary - разделитель блоков данных (в данном случае ----------zqaJEx7bclBmbt00xtw1Cp). '--'+boundary означает конец блока, '--'+boundary+'--' - конец данных. Первая строка блока содержит имя файла (filename), вторая - тип данных. Далее идет пустая строка и содержимое файла. Если тип данных text/*, то содержимое рассматривается как текст, иначе - как бинарные данные. Нужно все файлы сохранить под своими именами. У кого есть алгоритм, поделитесь, а то я застрял на этих бинарных данных.
 
Ответить с цитированием

  #2  
Старый 17.09.2007, 17:41
Red_Red1
Участник форума
Регистрация: 12.01.2007
Сообщений: 262
Провел на форуме:
4608122

Репутация: 874
Отправить сообщение для Red_Red1 с помощью ICQ
По умолчанию

Взялся за реализацию.... хотелось бы уточнить откуда берем данные? Я создал файл с содержимым как описано в примере и работаю с файлом. Пробую реализовать поиск разделителя и имени в файле, а после сохранить нужные данные в заданом формате.
Если открывать файл мультипарт данных как текстовый то легко найти нужный разделитель но не понятно как прочитать бинарные данные, если файл открываем как набор байт, то легко сохранить данные, но неудобно реализовать поиск разделителя имени и т.д. (но возможно). Была попытка открыть файл как текст найти нужное, сохранить позицию с которой нужно записывать данные, открыть файл уже как бинарник и сохранять с нужной позиции.... тут я остановился и решил уточнить откуда берем данные.
З.Ы. А может вообще нужно иначе, короче хочу попробовать сделать, нужна дополнительная инфа...
 
Ответить с цитированием

  #3  
Старый 17.09.2007, 18:06
Joker-jar
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме:
4172659

Репутация: 646


Отправить сообщение для Joker-jar с помощью ICQ
По умолчанию

Данные берутся из стандартного устройства ввода. С этим я уже криво, но разобрался, иду дальше =)
 
Ответить с цитированием

  #4  
Старый 17.09.2007, 18:24
Ky3bMu4
Постоянный
Регистрация: 03.02.2007
Сообщений: 520
Провел на форуме:
1777536

Репутация: 932


Отправить сообщение для Ky3bMu4 с помощью ICQ
По умолчанию

Есть маленькая поправочка: Перед началом перечисления данных файла я бы поставил "Start".

Цитата:
Если тип данных text/*, то содержимое рассматривается как текст, иначе - как бинарные данные.
А разница? Просто в файл пиши и всё.
А так грубо накидал.(Вместе со старотом)
Код:
#include "windows.h"

void main (void){
char buff[10000];//буффер с твоими данными
char temp[1000];//буффер для данных 
char name[10];//буффер для имени
int x,z,c,u;//инты для буфферов)))
bool y; //флаг
x=0;
u=0;
c=0;

while(x<=10000){ // ищем 1 (------------zqaJEx7bclBmbt00xtw1Cp) 
	if(buff[x]=='1'){
		
		if(buff[x+1]=='C'){
			
			if(buff[x+2]=='p'){ //нашли разделитель
				while(buff[x]!='f'){ //ищем file
					if(buff[x+1]=='i'){
						if(buff[x+2]=='l'){
z=x+10;
while(buff[z]!='"'){
	name[c]=buff[z];
	z++;
	c++;
}
name[c]=NULL;//т.к. последний символ "

//тут нужно создать файл с именем name


						}
					}
					x++;

				}
				while(buff[z]!='a'){//ищем Start
					if(buff[z+1]=='r'){
						if(buff[z+2]=='t'){
							z=z+3;
							y=FALSE;
							while(y!=TRUE){
								while(buff[z]!='-'){
									temp[u]=buff[z];
									z++;
									u++;
								}
								if(buff[z+1]=='-'){
									if(buff[z+2]=='-'){ //ну я думаю в тексте файла кроме разделителя 3 - подряд небудет
                                     y=TRUE;
									}
								}
							}
							//а тут нужно записать temp в файл с именем name
						}
					}
				}

			}
		}
	}
	x++;

}


}
 
Ответить с цитированием

  #5  
Старый 20.09.2007, 00:38
Red_Red1
Участник форума
Регистрация: 12.01.2007
Сообщений: 262
Провел на форуме:
4608122

Репутация: 874
Отправить сообщение для Red_Red1 с помощью ICQ
По умолчанию

Вот попытка решить задачку.
Делал как я уже писал через файл. Т.е. данные брал из файла и делил так как нужно.
Вот ссылки на решение
http://forfiles2007.narod.ru/MULTDAT1.PAS исходник
http://forfiles2007.narod.ru/TEST.111 файл который разбирал, ну это чтобы если пробовать то свой не делать
http://forfiles2007.narod.ru/MULTDAT1.EXE может кому просто интересно увидеть результат
http://forfiles2007.narod.ru/JokerJar.rar все это дело в архиве.
Сразу скажу нужна доработка для боевых условий. Писал на Турбо Паскаль 7,0. Можно быстро перевести в Дельфи. Писал для того чтобы решить задачку.
Да вспомнил, поступил так как рекомендовал Ky3bMu4, перед началом перечисления данных файла я поставил "start" Это придает некоторое удобство для написания, хотя можно и без него, но кривее и косее т.к. пока опыт еще не тот.
Joker-jar если алгоритм подходит, то могу перевести на Дельфи. И сразу рекомендации по улучшению. Лучше данные сначала засунуть в память, а потом работать уже с памятью, но как я уже писал - опыт еще не позволяет такие фишки вытворять...
Надеюсь помог (если сильно плохо, то показал как НЕ надо делать )

Последний раз редактировалось Red_Red1; 20.09.2007 в 00:46..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ответьте на вопросы Legion342 PHP, PERL, MySQL, JavaScript 5 22.11.2007 14:03
Глоссарий криптографии Liar Windows 11 10.09.2007 23:15
Перехват данных BрxMSG Чужие Статьи 0 26.12.2006 22:22
Перехват данных, кто, где и как? GreenBear Чужие Статьи 1 16.12.2006 16:43
Перехват данных: кто, где и как И.Г. Мировые новости 0 03.12.2006 22:46



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ