Webkit JavaScript PUT或POST图像REST样式可以作为纯二进制吗?

Bra*_*des 7 javascript rest webkit http cordova

当我的浏览器从网站下载图像时,不涉及base64编码.它发出比如一个HTTP命令GET /image.jpg,并且接收其的HTTP响应Content-Type是一样的东西image/jpg,其Content-Length是一个字节的图像中,其主体是原始二进制图像数据本身的数量,和.数据既不使用字符集编码,也不使用base64等编码进行编码.

编写RESTful资源已经训练我期望HTTP之间的对称性GET,PUT因此,例如,当我执行a时,传递JSON数据的URL GET将在接受JSON数据时接受PUT.在任何情况下都不涉及表格编码; 在这两种情况下,只是Content-Length给出了有效载荷中的字节数,一个Content-Type标识声明有效载荷在某些字符集中是JSON,然后字符数据单独存在并且作为GET或的主体PUT.

我正在编写一个PhoneGap应用程序,让用户可以拍摄照片并使用我的应用程序上传照片.我本来以为我可以设计出这样的RESTful接口,支持对称GETPUT-这样PUT的命令不涉及特殊的编码,也没有涉及到的字符集的任何想法,只是有一个Content-Typeimage/jpg,然后二进制JPG数据质量作为其有效载荷.显然,这比尝试对表单内的图像进行编码更有效地使用带宽.当我PUT使用类似工具的URL 时,这种方法可以正常工作curl.

但我没有运气PUT从PhoneGap WebKit JavaScript 做一个干净的RESTful !PhoneGap愿意将图像作为本地file:URL 返回到我的JavaScript ,或者作为data:带有图像数据的内容由base64编码提供.但在这两种情况下,我都无法找到一种清晰的方法将图像转换为纯二进制格式(我会使用其中一个新的Blob对象吗?如果是这样,怎么做?)然后引起一个PUT,而不用额外的图层来装饰请求of form或encoding cruft,将简单地将原始图像作为HTTP请求有效负载通过线路传输到我的Web服务器.

有没有人知道如何将PUT原始图像作为身体引导WebKit到AJAX请求?感谢任何指针 - 甚至任何有用的答案,我接近这一切都错了!

Dom*_*nic 2

至于二进制图像处理,二进制文件检查器演示作为端到端示例可能会有所帮助。

MDN上有一些关于Blob从文件系统获取 s的教程信息。这篇博文介绍了如何将 base64 URI 转换为.ArrayBufferBlob

最后,可以使用接口上传anArrayBuffer或 a 。BlobXMLHttpRequest2

XHR2 规范似乎暗示PUT以及许多其他 HTTP 方法是受支持的。因此,结合所有这些,您可以将文件填充到Blobs 中并使用 XHR2 发送它们。


在base64-binary.js的帮助下使用 base64 解码方法的未经测试的代码示例:

var BASE_64_PREFIX = "base64,";
function getBase64Content(base64Uri) {
   var index = base64Uri.indexOf(BASE_64_PREFIX);
   return base64Uri.substring(index + BASE_64_PREFIX.length);
}

function put(uri, data, onComplete) {
    var xhr = new XMLHttpRequest();
    xhr.open("PUT", uri, true);
    xhr.onload = onComplete;

    xhr.send(data);
}

var base64Uri = fromPhoneGap();
var base64Content = getBase64Content(base64Uri);
var arrayBuffer = Base64Binary.decodeArrayBuffer(base64Content);

put("/some/uri", arrayBuffer, function () {
    console.log("All done");
});
Run Code Online (Sandbox Code Playgroud)

也就是说,我怀疑其中的大部分功能是否适用于最新的桌面 WebKit,更不用说您将通过 PhoneGap 获得的版本了。您可能不适合利用这些草案规范。