【问题标题】:Get buffer from Rackspace download using pkgcloud使用 pkgcloud 从 Rackspace 下载中获取缓冲区
【发布时间】:2016-04-05 22:26:48
【问题描述】:

这可能是不可能的,但我正在尝试使用 pkgcloud 模块在 Rackspace 上返回图像的缓冲区对象,而无需写入文件系统。我以前见过这样做,但是这两个示例都显示了将下载内容通过管道传输到文件系统。

    function get() {
        return new Promise(function (resolve, reject) {
            _this._RackClient.download(options, function(err, results) {
                if (err !== null) {
                    return reject(err);
                    console.log("Errow Downloading:", err);
                }
                resolve(buffer);
            });
        });
    }
    return get();

理想情况下,这是我希望它工作的方式,但目前请求中没有正文。我可以使用stream.passThrough() 并返回类似于上传缓冲区的内容吗?

【问题讨论】:

    标签: node.js rackspace-cloudfiles pkgcloud


    【解决方案1】:

    .download() 返回一个可读流,所以它应该只是缓冲该输出的问题。例如:

    var stream = _this._RackClient.download(options);
    var buf = [];
    var nb = 0;
    var hadErr = false;
    stream.on('data', function(chunk) {
      buf.push(chunk);
      nb += chunk.length;
    }).on('end', function() {
      if (hadErr)
        return;
      switch (buf.length) {
        case 0:
          return resolve(new Buffer(0));
        case 1:
          return resolve(buf[0]);
        default:
          return resolve(Buffer.concat(buf, nb));
      }
    }).on('error', function(err) {
      hadErr = true;
      reject(err);
    });
    

    【讨论】:

    • 这可以正确获取数据,但我很好奇 switch 语句正在处理什么,因为它似乎不是正确的缓冲区。 @mscdex
    • “正确的缓冲区”是什么意思? buf 只是在块进入时存储它们,switch 只是一个优化以避免调用Buffer.concat(),除非必要。
    • 是的,我发现 rackclient 从 Parse-Server 得到了错误的参数
    • 嗨,当我这样做时,我会创建一个没有长度的视频
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2013-06-24
    相关资源
    最近更新 更多