我尝试使用带有Angular2的Http类的POST发送原始二进制数据(一片二进制文件)。但是在服务器端,接收的数据是填充的,可能是由于某些客户端JSON转换。例如,从浏览器发送的100000字节在服务器上读取为121201字节。
我可以使用jQuery.ajax实现这种原始二进制传输并保留在同一服务器上接收的字节数:
$.ajax({
type: "POST",
url: "http://localhost:3000/analysis",
data: blob,
processData: false,
contentType: 'application/octet-stream',
error: function (err) {
console.log(err);
},
success: function (data) {
// do something heroic
}
});
正在使用FileReader API readAsBinaryString
读取该文件。我怀疑我需要在Angular 1中做一些事情,你将transformRequest
设置为空数组,这样字节就不会被强制转换为JSON。这是我的Angular2版本:
getAnalysis = (headerBytes: any) => {
let header = new Headers();
header.append("Content-Type", "application/octet-stream");
this.http.post("http://localhost:3000/analysis", headerBytes, {
headers: header
})
.retry(3)
// response data, not data being sent
.map(responseData => responseData.json())
.subscribe(
data => this.result = data,
err => this.logError(err),
() => console.log("request complete")
);
};
我可以在jQuery中尝试并做到这一点,但肯定有一种方法可以用新的热度做到这一点吗?