![]() |
Обработка 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/*, то содержимое рассматривается как текст, иначе - как бинарные данные. Нужно все файлы сохранить под своими именами. У кого есть алгоритм, поделитесь, а то я застрял на этих бинарных данных. |
Взялся за реализацию.... хотелось бы уточнить откуда берем данные? Я создал файл с содержимым как описано в примере и работаю с файлом. Пробую реализовать поиск разделителя и имени в файле, а после сохранить нужные данные в заданом формате.
Если открывать файл мультипарт данных как текстовый то легко найти нужный разделитель но не понятно как прочитать бинарные данные, если файл открываем как набор байт, то легко сохранить данные, но неудобно реализовать поиск разделителя имени и т.д. (но возможно). Была попытка открыть файл как текст найти нужное, сохранить позицию с которой нужно записывать данные, открыть файл уже как бинарник и сохранять с нужной позиции.... тут я остановился и решил уточнить откуда берем данные. З.Ы. А может вообще нужно иначе, короче хочу попробовать сделать, нужна дополнительная инфа... |
Данные берутся из стандартного устройства ввода. С этим я уже криво, но разобрался, иду дальше =)
|
Есть маленькая поправочка: Перед началом перечисления данных файла я бы поставил "Start".
Цитата:
А так грубо накидал.(Вместе со старотом) Код:
#include "windows.h" |
Вот попытка решить задачку.
Делал как я уже писал через файл. Т.е. данные брал из файла и делил так как нужно. Вот ссылки на решение 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 если алгоритм подходит, то могу перевести на Дельфи. И сразу рекомендации по улучшению. Лучше данные сначала засунуть в память, а потом работать уже с памятью, но как я уже писал - опыт еще не позволяет такие фишки вытворять... Надеюсь помог (если сильно плохо, то показал как НЕ надо делать ;) ) |
| Время: 07:00 |