将字节数组从 AJAX 传递到 Java

问题描述 投票:0回答:1

我正在尝试通过 AJAX 向服务器发送字节数组:

$.ajax({
  url: armd.scieldan.server + "/detachedSignFile/",
  timeout: 120000,
  type: "POST",
  data: byteArray,
  responseType: 'arraybuffer',
  success: function(response) {
    console.log("Sign: " + response);
  },
  error: function() {
    console.log("error");
  }
});

并尝试从

httpExchange
中提取该数组,但
requestBody
的内容为空:

public void handle(HttpExchange httpExchange) throws IOException {
    httpExchange.getResponseHeaders().set("Content-Type", "text/plain");

    InputStream requestBody = httpExchange.getRequestBody();

    byte[] receivedBytes = IOUtils.toByteArray(requestBody);
}

实际上

BufferedInputStream
包含在
requestBody
内部,但无法访问。

有什么想法可以如何通过 JSON 正确地将字节数组传递到

HttpExchange

javascript java ajax http
1个回答
0
投票

如果您在客户端使用 AJAX,在服务器上使用 HTTP/REST,它通常会将您的内容视为字符串数据,除非您另有说明并使用特殊处理。

改进现有内容的最简单方法是对字节进行 Base-64 编码并将其作为有效负载发送为

text/plain
(请求内容类型)。在服务器上,您可以读取整个输入流并解码或将流包装在 Base-64 解码器中。

另一种选择是使用二进制内容类型发送数据,例如

application/octet-stream
,除非您有特定的文件类型。这样,从浏览器/客户端到服务器的网络基础设施就知道如何处理发送的字节。

可能发生的情况是,当前未明确指定内容类型,并且默认为

text/plain
application/json
之类的内容,然后在需要 ASCII 或其他编码时遇到无效的字节序列,例如空字符。这会导致您的输入流处理被中断并且输入数据丢失,从而导致没有向服务器报告任何内容。

© www.soinside.com 2019 - 2024. All rights reserved.