cod*_*ero 5 blob node.js express angular angular-httpclient
在将数据发送到客户端之前,我已经阅读了十几篇关于如何在ArrayBuffertoBlob或 to之间转换的帖子Uint8Array......但我似乎根本无法让它工作。Blob当我确实获取数据时,在将其输出到文件之前,我无法将它们重建回来。
const Blob = require('cross-blob');
const randomBytes = require('randombytes');
const buffer = randomBytes(1024); // Supposed to give me Buffer
Run Code Online (Sandbox Code Playgroud)
以下是我尝试过的东西......
data = buffer;
Run Code Online (Sandbox Code Playgroud)
^ 给我<Buffer 11 22 33 ...>
data = Uint8Array.from(buffer);
Run Code Online (Sandbox Code Playgroud)
^ 给了我一个整数数组,这看起来最有前途?但是当到达客户端时,它变成了一个带有索引和字节值的对象......
data = Uint8Array.from(buffer).buffer;
Run Code Online (Sandbox Code Playgroud)
^ 给出ArrayBuffer { byteLength: 1024},当检查时它显示size: 2并且type: 'text/plain'......
data = new Blob(buffer, { type: 'application/octet-stream' });
data = new Blob([new Uint8Array(buffer, buffer.byteOffset, buffer.length)], { type: 'application/octet-stream' });
data = new Blob([Uint8Array.from(buffer)], { type: 'application/octet-stream' });
Run Code Online (Sandbox Code Playgroud)
^ 所有这些,当到达客户端时也带有size: 2和type: 'text/plain'...
在服务器端,我正在运行 Express:
router.get('/test/*', function(req, res, next) {
...
let data = myFunctionThatGeneratesData();
res.send(data);
});
Run Code Online (Sandbox Code Playgroud)
在客户端,我像这样请求(Angular/TypeScript):
this.http.get('/test/random-bytes-array', {
responseType: 'blob' // also tried 'arraybuffer'
}).subscribe(data => {
debugger;
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
我一定做错了什么......我试图发送多个二进制数据块,或者作为ArrayBuffer,Uint8Array或Blob(无论有效),当到达另一端时,将它们组合回Blob.
在 Node.js 中,crypto.randomBytes返回一个Buffer. 这是用于向客户端发送原始数据的正确类型。
使用 Express 时,使用 来设置响应的正确内容类型非常重要res.type()。但是,在发送 时Buffer,如果在任何其他中间件中未设置 content-type 标头,则express将application/octet-stream默认使用.
当参数是 Buffer 对象时,该方法将 Content-Type 响应头字段设置为“application/octet-stream”,除非之前定义。
router.get('/test/*', function(req, res, next) {
...
let data = myFunctionThatGeneratesData();
res.type('application/octet-stream').send(data);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ might not be necessary
});
Run Code Online (Sandbox Code Playgroud)
最后,在 Angular 中,使用responseType: 'blob'是正确的:
this.http.get('/test/random-bytes-array', {
responseType: 'blob'
}).subscribe(data => {
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8923 次 |
| 最近记录: |