如何从 Node.js 中的 $http 请求 return ArrayBuffer?
How to return ArrayBuffer from $http request in Node.js?
我从 Angular.js 向 Node.js 发送了一个 $http.post
请求,以便获得 ArrayBuffer
如下:
$http.post('/api/scholarships/load/uploaded-files', Global.user, {responseType:'arraybuffer'}).success(function(ab){
console.log(ab); // Return ArrayBuffer {}
});
然后,在 Node.js 中,我检索了上传的文件数据并将 Buffer
对象转换为 ArrayBuffer
对象:
exports.loadUploadedFiles = function(req, res) {
db.UserFile.findAll().success(function(files) {
var buffer = files[0].dataValues.data; // Get buffer
var arrayBuffer = new ArrayBuffer(buffer.length); // Start transforming Buffer to ArrayBuffer
var views = new Uint8Array(arrayBuffer);
for(var i = 0; i < buffer.length; ++i) {
views[i] = buffer[i];
}
res.type('arraybuffer');
res.send(arrayBuffer); // Send the ArrayBuffer object back to Angular.js
}).error(function(err) {
console.log(err);
res.sendStatus(500);
});
};
当我尝试打印上面 $http.post
的响应时,我总是得到 ArrayBuffer{}
。我做错了什么?任何帮助将不胜感激。
不需要在服务器端创建ArrayBuffer。事实上,只需返回 node.js 中的 Buffer 就可以了。 ArrayBuffer 是 client/browser 方面的一个概念,用于将来自服务器的数据解释为 ArrayBuffer。您得到 "ArrayBuffer{}" 的原因可能是因为 node.js 是在 res.send() 上对 ArrayBuffer 进行 toString() 处理,因为它不理解该对象。所以试试这个
exports.loadUploadedFiles = function(req, res) {
db.UserFile.findAll().success(function(files) {
var buffer = files[0].dataValues.data; // Get buffer
res.send(buffer);
}).error(function(err) {
console.log(err);
res.sendStatus(500);
});
};
我从 Angular.js 向 Node.js 发送了一个 $http.post
请求,以便获得 ArrayBuffer
如下:
$http.post('/api/scholarships/load/uploaded-files', Global.user, {responseType:'arraybuffer'}).success(function(ab){
console.log(ab); // Return ArrayBuffer {}
});
然后,在 Node.js 中,我检索了上传的文件数据并将 Buffer
对象转换为 ArrayBuffer
对象:
exports.loadUploadedFiles = function(req, res) {
db.UserFile.findAll().success(function(files) {
var buffer = files[0].dataValues.data; // Get buffer
var arrayBuffer = new ArrayBuffer(buffer.length); // Start transforming Buffer to ArrayBuffer
var views = new Uint8Array(arrayBuffer);
for(var i = 0; i < buffer.length; ++i) {
views[i] = buffer[i];
}
res.type('arraybuffer');
res.send(arrayBuffer); // Send the ArrayBuffer object back to Angular.js
}).error(function(err) {
console.log(err);
res.sendStatus(500);
});
};
当我尝试打印上面 $http.post
的响应时,我总是得到 ArrayBuffer{}
。我做错了什么?任何帮助将不胜感激。
不需要在服务器端创建ArrayBuffer。事实上,只需返回 node.js 中的 Buffer 就可以了。 ArrayBuffer 是 client/browser 方面的一个概念,用于将来自服务器的数据解释为 ArrayBuffer。您得到 "ArrayBuffer{}" 的原因可能是因为 node.js 是在 res.send() 上对 ArrayBuffer 进行 toString() 处理,因为它不理解该对象。所以试试这个
exports.loadUploadedFiles = function(req, res) {
db.UserFile.findAll().success(function(files) {
var buffer = files[0].dataValues.data; // Get buffer
res.send(buffer);
}).error(function(err) {
console.log(err);
res.sendStatus(500);
});
};