Javascript 如何从Node.js中的$http请求返回ArrayBuffer?

Javascript 如何从Node.js中的$http请求返回ArrayBuffer?,javascript,angularjs,node.js,Javascript,Angularjs,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中,我检索上传的文件数据

我从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中,我检索上传的文件数据,并将
缓冲区
对象转换为
阵列缓冲区
对象:

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);
    });
};
exports.loadUploadedFiles=函数(req,res){
db.UserFile.findAll().success(函数(文件){
var buffer=文件[0]。dataValues.data;//获取缓冲区
var arrayBuffer=new arrayBuffer(buffer.length);//开始将缓冲区转换为arrayBuffer
var视图=新的Uint8Array(arrayBuffer);
对于(变量i=0;i

当我试图打印上面
$http.post
的响应时,我总是得到
ArrayBuffer{}
。我做错了什么?任何帮助都将不胜感激。

无需在服务器端创建ArrayBuffer。实际上,只要在node.js中返回缓冲区就可以了。ArrayBuffer是客户端/浏览器端的一个概念,用于将来自服务器的数据解释为ArrayBuffer。获取“ArrayBuffer{}”的原因可能是node.js正在res.send()上对ArrayBuffer执行字符串(),因为它不理解对象。所以试试这个

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);
    });
};

我要发布的内容:)参考:;res.send()允许发送字符串或缓冲区感谢您的响应。当我把它作为缓冲区传输时,我得到了一个JavaScript对象。是否可以将此对象转换为Angular.js中的ArrayBuffer?您得到了什么类型的Javascript对象?另外,缓冲区包含什么类型的数据(即它是JSON吗)?实际上,这是我从Node.js返回缓冲区对象得到的:`�巴布亚新几内亚IHDR�,��$'FIDATx���我�]我�� ���������是的�D���###R�ʒ*����F�^T�jMCh�H�a0�/��<代码>f0� ��ԭFM��T�=�ʭ“3c�F��}s�我�ӷ�޽fv�|������+y~”�������}����C���o�0�xP k�0�0i7�0ä�0�0�v�0�0L� �0ä�0�0�v�0�0L� �0�0i7�0ä�0�0L� �0�0i7�0ä�0�0�v�0�0L� �0ä�0�0�v�0�0L� �0�0i7�0c)�5.����ꢯ#�5.�A.��v�0�0̵[�Z�苏�{�Y���吴>�}�RG�>���Ϣ ���^s�{��|�6g���0̵;~���P�߿����±�a&��我��h̢�K%l��o�J���>�2.���ٰ��, 奥尔�3.�
…它看起来像一个PNG文件。我刚刚对您的场景做了一个简单的测试,得到了预期的“ab”作为ArrayBuffer。您得到的“ab”的具体类型是什么?