Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将文件从java发送到angular会导致数据格式错误/编码错误_Java_Encoding_Restangular - Fatal编程技术网

将文件从java发送到angular会导致数据格式错误/编码错误

将文件从java发送到angular会导致数据格式错误/编码错误,java,encoding,restangular,Java,Encoding,Restangular,我有两种类型的文件需要从服务器发送到客户端。我使用angularjs作为客户端,在服务器上使用java。我没有问题发送纯文本文件和下载文件中的内容。我遇到的障碍是pcap。在某些情况下,我想请求pcap并下载。但有些东西正在对数据进行编码,我不太确定是什么。我已经花了几个小时尝试了以下内容和一些不同的组合 我的Java看起来像: @GET @Produces({MediaType.APPLICATION_OCTET_STREAM}) @Path("/{id}/packet/downl

我有两种类型的文件需要从服务器发送到客户端。我使用angularjs作为客户端,在服务器上使用java。我没有问题发送纯文本文件和下载文件中的内容。我遇到的障碍是pcap。在某些情况下,我想请求pcap并下载。但有些东西正在对数据进行编码,我不太确定是什么。我已经花了几个小时尝试了以下内容和一些不同的组合

我的Java看起来像:

  @GET
  @Produces({MediaType.APPLICATION_OCTET_STREAM})
  @Path("/{id}/packet/download")
  public static Response downloadFile(String filePath) {
    ResponseBuilder rb;
    File file = new File(filePath);

    if (file.exists()) {
      rb = Response.ok(file, mimeType);
      rb.header("Content-Disposition", "attachment; filename=" + file.getName());
      rb.header("Content-Length", file.length());
    } else { //
      rb = Response.status(Status.NOT_FOUND);
    }

    return rb.build();
  }
还有我的javascript:

that.savePacket = function(item) {
  var url = 'rs/' + that.baseUrl + '/' + item.r$itemData.id + '/packet/download';
  return restangularInstance.one(url).get().then(function(response) {
    var file = {};
    file.name = parseFileName(response.headers('Content-Disposition'));
    file.data = response.data;
    file.isText = file.name.endsWith('.txt');
    var blob = new Blob([response.data], {type: 'application/octet-stream'});
    var a = document.createElement('a');
    a.href = URL.createObjectURL(blob);
    a.download = file.name;
    a.click();
    return file;
  });
};
在接收端,我的下载保存对话框正确弹出,文件下载。然而,由于某种原因,当数据是一个
pcap
时,您可以看出数据在传输过程中被篡改了

当我在文件发送前对其进行hexdump时,我们会看到以下内容:

0000000 c3d4 a1b2 0002 0004 0000 0000 0000 0000
0000060 9090 9090 9090 9090 9090 9090 9090 9090
但下载文件后,我看到:

0000000 bfef c3bd efb2 bdbf 0002 0004 0000 0000
0001190 bfef efbd bdbf bfef efbd bdbf bfef efbd
00011a0 bdbf bfef 00bd  
就上述替代方案而言,我已尝试:

  • Files.readAllBytes(路径)
    并将字节数组推入响应中
  • String mimeType=new MimetypesFileTypeMap().getContentType(文件)
    并将类型推入响应创建中的type中
  • 强制mime为
    application/cap

在每次测试中,我发现出于某种原因,我的文本文件工作正常,但pcap总是格式不正确。

因此,结果表明Restanglar篡改了数据。在调用堆栈中添加一个
.withHttpConfig({responseType:'arraybuffer'})