Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Отправка битовых данных на сервер (http://www.flasher.ru/forum/showthread.php?t=173184)

Владимир Буквин 26.12.2011 11:18

Отправка битовых данных на сервер
 
Задача состоит в том, чтобы отправить на сервер объект с двумя полями.
первое имеет строковый тип, второе - картинка.
если делаю так
Код AS3:

var urlLoader:URLLoader = new URLLoader();        
var request:URLRequest = new URLRequest();
var data:URLVariables = new URLVariables();
data.url = uploadURL;
data.photo = urlRequest.data;//содержит картинку
request.data = data;       
request.url = MY_URL;       
request.method = URLRequestMethod.POST;                               
urlLoader.load(request);

то отправляется запрос, в котором картинка преобразуется в строку
Код AS3:

data.photo

, причем данные урезаются
Как можно отправить два объекта, один из которых содержит увесистые битовые данные?

goodguy 26.12.2011 11:23

Для бинарных данных нужно использовать
Код AS3:

URLLoaderDataFormat.BINARY;


Владимир Буквин 26.12.2011 11:38

добавил
Код AS3:

urlLoader.dataFormat = URLLoaderDataFormat.BINARY;

перед
Код AS3:

urlLoader.load(request);

не помогло

Добавлено через 2 минуты
потом распечатал
Код AS3:

request.data

используя trace - файл печатается весь, зато отправка все равно урезанная. может там максимальный размер данных есть?

Добавлено через 42 минуты
при отправке отрезается часть и остается:
--yottijtmtbrsewjrkvoykbbhdlaeecyy
Content-Disposition: form-data; name="Filename"
photo.png
--yottijtmtbrsewjrkvoykbbhdlaeecyy
Content-Disposition: form-data; name="photo"; filename="photo.png"
Content-Type: application/octet-stream
ÿØÿà

вот кусок части который обрезался
JFIFHHÿáExifMM*bj(1r2އi¤Ð
ü€'
ü€'Adobe Photoshop CS2 Windows2010:09:09 17:20:28**‚*‚&(.ÒHHÿØÿàJFIFHHÿí
Adobe_CMÿîAdobed€ÿÛ„

и то здесь не отображаются некоторые символы

maxkar 26.12.2011 12:31

Цитата:

Сообщение от Владимир Буквин (Сообщение 1053664)
зато отправка все равно урезанная.

Смотрелось чем? Есть подозрение, что приемка данных на сервере неправильная. Или в сниффере http-траффика видно, что отправка идет не до конца?

Владимир Буквин 26.12.2011 12:46

через charles смотрел. количество байт должно было отправиться 64 кб, а отправилось примерно 1.5 кб

cleptoman 26.12.2011 13:22

MultipartData вам в помощь..

Код AS3:

urlLoader.dataFormat = URLLoaderDataFormat.BINARY

это указание для лоадера а не отправляемых данных..."понимать" формат должен серверный скрипт

Genzo 26.12.2011 13:22

Имхо, может имеет смысл использовать Base64?

maxkar 26.12.2011 13:24

Цитата:

Сообщение от Владимир Буквин (Сообщение 1053673)
Количество байт должно было отправиться 64 кб, а отправилось примерно 1.5 кб

1.5 Кб - это характерное число. На чем сервер? Приведите фрагмент серверного кода, получающий данные? Указанный объем косвенно подтверждает неверный код приема данных на сервере (сервер слишком рано отправляет ответ и закрывает соединение, не вычитав все).

cleptoman 26.12.2011 14:30

Base64 в эпоху нанотехнологий и третьего АС как то не по феншую )

Владимир Буквин 26.12.2011 15:08

Цитата:

Сообщение от cleptoman (Сообщение 1053677)
MultipartData вам в помощь..

Код AS3:

urlLoader.dataFormat = URLLoaderDataFormat.BINARY

это указание для лоадера а не отправляемых данных..."понимать" формат должен серверный скрипт

Здесь multipartURLLoader не поможет, тут политика безопасности не дает, поэтому я свой сервер использую

Добавлено через 3 минуты
Цитата:

Сообщение от maxkar (Сообщение 1053679)
1.5 Кб - это характерное число. На чем сервер? Приведите фрагмент серверного кода, получающий данные? Указанный объем косвенно подтверждает неверный код приема данных на сервере (сервер слишком рано отправляет ответ и закрывает соединение, не вычитав все).

1.5 это размер запроса в кбайтах. Это я через Charles(перехватчик запросов) посмотрел

Добавлено через 7 минут
разобрался! на сервер отправлял данные в виде строк. преобразовал битовые данные в строку. при этом битовые данные не доходили до сервера целиком, данные урезались на том месте где встречался символ, код которого = 0. Я заменил все такие символы на строку размером в 5 символов, чтоб потом декодировать можно было на сервере


Часовой пояс GMT +4, время: 01:02.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.