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

标签 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 中,我检索上传的文件数据并将 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 是客户端/浏览器端的一个概念,用于将来自服务器的数据解释为 ArrayBuffer。你得到“ArrayBuffer{}”的原因可能是因为 node.js 是 toString()'ing 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);
    });
};

关于javascript - 如何从 Node.js 中的 $http 请求返回 ArrayBuffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27728480/

相关文章:

javascript - 如何遍历 localStorage 值

javascript - 如何以 angularjs 方式执行以下 jquery 代码

angularjs - Angular 无法将工厂注入(inject) Controller

javascript - 安装和使用特定 npm 包时遇到问题。我究竟做错了什么?

javascript - HEROKU 上的 CORS 问题

javascript - 将事件处理程序添加到 AngularJS 包含内容

javascript - 一种在 Phaser 框架中切换 Sprite 动画的方法

javascript - Vue拼接(将数组项移动到数组中的另一个位置)不更新DOM

javascript - 当必填字段为空时使用 ng-disable

mysql - Docker Node 应用程序无法连接链接的mysql容器