当前位置: 首页 > 面试题库 >

通过HTTP在JavaScript中发送二进制数据

穆远
2023-03-14
问题内容

我正在尝试将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个)传递给服务器,这就是服务器将其视为未按预期方式处理的原因。

有必要通过将$.ajaxproperty 设置processData为来防止这种行为false

默认情况下,作为对象传递给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);


 类似资料:
  • 我正在开发一个查看器应用程序,其中服务器捕获图像,执行一些图像处理操作,这需要在客户端显示在HTML5画布上。我写的服务器是在VC和使用http://www.codeproject.com/Articles/371188/A-Cplusplus-Websocket-server-for-realtime-interact. 到目前为止,我已经实现了所需的功能。现在我需要做的就是优化。引用是一个用来

  • 我必须对FTP服务器进行编码,而且我在数据传输方面遇到了问题。 我在linux上使用ftp命令来测试它,我目前正在使用,它发送工作目录中的文件/目录列表。一切正常(ftp打印文件列表),除了ftp打印以下警告: 我想删除该警告,我认为ftp需要二进制数据,但我不知道如何通过套接字发送这样的数据,我目前正在使用最基本的方式发送结果:

  • 问题内容: 在我的开发环境中,我有两个服务器。一个通过http请求将图像发送给另一个。 客户端服务器执行以下操作: 收到请求的服务器执行以下操作: 如果我发送小图像,则效果很好。但是,如果我发送了较大的图像,尽管文件保存正确,则仅显示图像的第一上部。其余为黑色。图像尺寸正确。 我想这只是文件中写入的图像的第一块。我尝试创建一个和一个,但似乎不起作用: 我可以直接从二进制数据流传输到文件吗?对于我所

  • 问题内容: 在XML文档中的系统之间发送二进制内容的最佳方法是什么 我知道Base64和Hex,真正的区别是什么。我当前正在使用Base64,但为此需要包括一个外部公共库,就像使用HEX一样,我想我可以创建一个函数。 问题答案: 您也可以为Base64编写自己的方法…但是我通常建议同时使用外部的,经过良好测试的库。(这并不意味着它们短缺。) Base64和十六进制之间的区别实际上只是字节的表示方式

  • 问题内容: 我已经看到了许多在Java中通过套接字发送序列化数据的示例,但是我想要的只是发送一些简单的整数和字符串。而且,问题是我正在尝试将这些信息传递给用C编写的二进制文件。 因此,最重要的是:如何在Java中通过套接字发送一些字节? 问题答案: 我真的建议不要直接使用Java Sockets库。我发现Netty(来自JBoss)非常易于实现且功能强大。Netty ChannelBuffer类带

  • 在spring文档之后,我能够通过WebSockets通过STOMP发送和接收JSON。然而,在高速率下性能很差,因此我希望分析二进制消息的使用。 Spring腹板套筒4.0 我使用带有必要代理中继的SimpMessageTemplate发送消息-请参阅Spring留档 JavaScript客户端使用stomp接收数据。js使用标准机制。 消息以字符串形式接收,控制台输出如下。我在期待一些原始类型