通过 HTTP 在 JavaScript 中发送二进制数据
Sending binary data in javascript over HTTP
我正在尝试向网络上的设备发送HTTP POST。 我想向设备发送四个特定的数据字节,不幸的是,我似乎只能向设备发送字符串。 无论如何可以使用javascript发送原始二进制文件吗?
这是我用来执行 POST 的脚本,除非我在数据字段中放置一个字符串,否则它目前不会运行。 有什么想法吗?
(function ($) {
$.ajax({
url: '<IP of Address>',
type: 'POST',
contentType: 'application/octet-stream',
//data:'253,0,128,1',
data:0xFD008001,
crossDomain: true
});
})(jQuery);
默认情况下,jQuery 序列化数据(传入data
属性) - 这意味着0xFD008001
数字作为"4244668417"字符串(10 个字节,而不是 4)传递给服务器,这就是为什么服务器不按预期处理它的原因。
有必要通过将属性processData
设置为false
来防止$.ajax
此类行为:
默认情况下,数据作为对象传入 data 选项 (从技术上讲,除字符串以外的任何内容)将被处理和 转换为适合默认内容类型的查询字符串 "application/x-www-form-urlencoded"。如果要发送 DOMDocument 或其他未处理的数据,将此选项设置为 false。
。但这只是整个故事的一部分:XMLHttpRequest.send
实现有其自身的限制。这就是为什么你最好的选择,我想,是使用TypedArrays制作你自己的序列化程序:
// Since we deal with Firefox and Chrome only
var bytesToSend = [253, 0, 128, 1],
bytesArray = new Uint8Array(bytesToSend);
$.ajax({
url: '%your_service_url%',
type: 'POST',
contentType: 'application/octet-stream',
data: bytesArray,
processData: false
});
或者根本不使用 jQuery:
var bytesToSend = [253, 0, 128, 1],
bytesArray = new Uint8Array(bytesToSend);
var xhr = new XMLHttpRequest();
xhr.open('POST', '%your_service_url%');
xhr.setRequestHeader('Content-Type', 'application/octet-stream');
xhr.send(bytesArray);
您可以使用 xhr2 通过 ajax 发送二进制数据,也可以将数据作为类型化数组或 blob 发送。
(function ($) {
var data = new Uint32Array(1);
data[0] = 0xFD008001;
$.ajax({
url: '<IP of Address>',
type: 'POST',
contentType: false,
processData: false,
//data:'253,0,128,1',
data:data,
crossDomain: true
});
})(jQuery);
https://developer.mozilla.org/en-US/docs/Web/API/Uint32Array
您可以将类型为 ArrayBuffer 的数据转换为 ArrayBufferView,如下所示:
var fileContent = new DataView(<ArrayBuffer_data>);
这样,您在发送文件内容时不会在控制台中收到警告。
atob()
和btoa()
:
var data = new Uint32Array(1);
data[0] = 0xFD008001;
atob(data)
这会将您的二进制数据转换为可作为文本发送的 base64 字符串。
- 如何处理从条形码扫描仪返回的二进制数据
- 将图像文件存储在猫鼬模式中的二进制数据中,并以html形式显示图像
- 二进制数据的可移植hashCode实现
- Javascript-将类型化数组保存为blob,并作为二进制数据读回
- 获取二进制数据并将其保存为.mp3文件Javascript
- 二进制数据的createObjectUrl失败
- 将数据结构转换为二进制数据
- 将二进制数据发送到服务器
- 将通过 AJAX 上传的二进制数据保存在 PHP 服务器上
- 如何在IE9中读取二进制数据
- 如何将二进制数据映射到javascript中的字符
- Base64解码不适用于二进制数据
- 如何在Firefox中使用xmlhttprequest和二进制数据,例如图像
- 通过HTTP请求将二进制数据上传到AppEngineBlobstore
- 为什么在Web套接字中使用二进制数据
- 在将图像作为原始图像二进制数据(png或jpeg)上传到服务器之前,裁剪或调整图像大小
- 如何在不编码或保存数据的情况下将二进制数据从javascript传递到actionscript(网页到flash)
- 使用牛仔和MessagePack通过websocket发送二进制数据
- 如何在严格模式下将附件下载为二进制数据
- 如何在浏览器中显示单词/ pdf二进制数据