Загрузка bytearray через URLRequest - PullRequest
3 голосов
/ 04 сентября 2011

Я пытаюсь загрузить байтовый массив, но изо всех сил пытаюсь заставить тип контента работать как image / png (он всегда идет как application / octet-stream независимо от того, что я делаю.).

Я проверил запрос через Charles Proxy и могу подтвердить, что он действительно всегда идет как application / octet-stream.

Мой код:

protected function onObjectLoaded(event:Event):void
{
    var byteArray:ByteArray = new ByteArray();
    var fileName:String = fileReference.name;
    var uploadPath:String = serviceURL;
    var parameters:Object = new Object();
    parameters.key = serviceKey;

    fileReference.data.readBytes(byteArray,0,fileReference.data.length);

    var urlRequest:URLRequest = new URLRequest();
    urlRequest.url = uploadPath;
    urlRequest.contentType = 'multipart/form-data; boundary=' + UploadPostHelper.getBoundary();
    urlRequest.method = URLRequestMethod.POST;
    urlRequest.data = UploadPostHelper.getPostData(fileName, byteArray, "fileupload",  parameters);
    urlRequest.requestHeaders.push( new URLRequestHeader( 'Content-type', 'image/png' ) );

    var urlLoader:URLLoader = new URLLoader();
    urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
    /*urlLoader.addEventListener(Event.COMPLETE, onComplete);
    urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onError);
    urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);*/
    urlLoader.addEventListener(Event.COMPLETE, processResults);
    urlLoader.load(urlRequest);
}

Как видите, я передаю тип контента как "multipart / form-data". Я попытался передать его как image / png, в результате чего сам запрос перешел как image / png, как и ожидалось, однако само изображение все еще идет как application / octet-stream.

Вот как выглядит мой запрос прямо сейчас:

- rojpkvwesrtjvrgjbwtadelavgcmxjot Содержание-расположение: форма-данные; имя = "ключ"

WZL0NXBE6dcb9af80668bb96b86fa72f5595422c --rojpkvwesrtjvrgjbwtadelavgcmxjot Content-Disposition: form-data; Name = "Имя файла"

Canada.png --rojpkvwesrtjvrgjbwtadelavgcmxjot Content-Disposition: form-data; Name = "FileUpload"; filename = "Canada.png" Тип контента: приложения / октет-поток

‰ PNG - Загрузка информации об изображении здесь в виде байтовой матрицы

Как видите, Canada.png передается как application / octet-stream. Я возился с запросом и вручную заставил его работать относительно того, что мой сервер ожидал получить, что точно так же, как указано выше, но где он говорит:

Canada.png --rojpkvwesrtjvrgjbwtadelavgcmxjot Content-Disposition: form-data; Name = "FileUpload"; filename = "Canada.png" Тип контента: приложения / октет-поток

Следует сказать:

Canada.png --rojpkvwesrtjvrgjbwtadelavgcmxjot Content-Disposition: form-data; Name = "FileUpload"; filename = "Canada.png" Тип контента: изображение / PNG

У меня вопрос, как это изменить, чтобы сам байтовый массив передавался как image / png вместо octet-stream

Это изображение загружается со стороны клиента и передается как FileReference, который я затем вызываю load (), а затем получаю его атрибут «data», где находится bytearray.

Любая помощь здесь будет принята с благодарностью, так как я боролся с этим в течение нескольких часов, но, похоже, не могу изменить тип mime для bytearray.

Заранее спасибо,

1 Ответ

1 голос
/ 04 сентября 2011

Тип содержимого в вашем запросе устанавливается внутри класса UploadPostHelper.Насколько я могу сказать, это жестко закодировано как application / octet-stream.Вы можете просто изменить его на image / png, если вы собираетесь загружать только png изображения.Или вы можете использовать другую оболочку запроса URL для загрузки файлов, которая позволяет вам указать тип содержимого файла.Например MultipartURLLoader .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...