Когда мой браузер загружает изображение с веб-сайта, кодировка base64 не используется. Он выдает команду HTTP, такую как GET /image.jpg
, и получает ответ HTTP, чей Content-Type
является чем-то вроде image/jpg
, чей Content-Length
- это число байтов в изображении, а тело - это сами необработанные двоичные данные изображения. Данные не кодируются с использованием набора символов и не кодируются с использованием схемы, подобной base64.
Написание ресурсов RESTful научило меня ожидать симметрии между HTTP GET
и PUT
, так что, например, URL, который доставляет данные JSON при выполнении GET
, будет принимать данные JSON, когда они представлены с PUT
. Ни в том, ни в другом случае не используется кодирование формы; в обоих случаях просто есть Content-Length
, дающий количество байтов в полезной нагрузке, заголовок Content-Type
, объявляющий, что полезная нагрузка является JSON в некотором наборе символов, и затем символьные данные располагаются отдельно и не украшаются как тело GET
или PUT
.
Я пишу приложение PhoneGap, которое позволяет пользователям делать фотографии и загружать их с помощью моего приложения. Я ожидал, что смогу разработать для этого интерфейс RESTful, который поддерживает симметричные GET
и PUT
- так что команды PUT
не требуют специального кодирования и не предполагают какого-либо представления набора символов, а просто имеют Content-Type
из image/jpg
, а затем масса двоичных данных JPG в качестве полезной нагрузки. Очевидно, что это более эффективное использование полосы пропускания, чем попытка кодировать изображение внутри формы. И этот подход прекрасно работает, когда я PUT
на URL-адрес с помощью инструмента, как curl
.
Но мне не повезло в выполнении чистого RESTful PUT
из PhoneGap WebKit JavaScript! PhoneGap готов вернуть изображение в мой JavaScript-код как локальный URL-адрес file:
или как URL-адрес data:
, который содержит встроенные данные изображения в кодировке base64. Но ни в том, ни в другом случае я не могу найти ясный способ преобразовать изображение в чистый двоичный формат (я бы использовал один из этих новомодных Blob
объектов для этого? Если да, то как?), А затем вызвал PUT
, что без добавление запроса к дополнительным слоям формы или кодирования будет просто передавать необработанное изображение по проводам на мой веб-сервер в качестве полезной нагрузки HTTP-запроса.
Кто-нибудь знает, как заставить WebKit PUT
запрос AJAX с необработанным изображением в качестве тела? Спасибо за любые указатели - или даже любые полезные ответы о том, что я все это неправильно подхожу!