2015-11-17 39 views
0

正如标题所示,我正在尝试从网址获取文件,然后将其上传到Google云端硬盘。我得到的问题是我的请求返回一个字符串与二进制数据,而不是文件。从URL下载文件并上传到云端硬盘而不保存

至于,我的代码是:

function uploadFile(auth, url){ 
    var drive = google.drive('v2'); 
    request.get(url, function(err, res){ 
     if(err) { 
      //Handles error. 
     } else { 
      drive.files.insert({ 
       auth: auth, 
       uploadType: 'multipart', 
       convert: true, 
       media: { 
        body: res.body 
       } 
      }); 
     } 
    }); 
} 

我试图管道缓冲的响应,然后上传到驱动器,但仍然只拿到转换为字符串的二进制文件。有没有人有如何解决这个问题的提示?

回答

1

res实际上是pipeable这样你就可以即

..., 
media: { 
    body: res, 
} 

我通过检查Google Node.js API得到这个结论通过它,他们有一个功能isReadableStream

下面的代码示例应该测试此向您展示资源将如何处理:

const request = require('request'); 
const stream = require('stream'); 

request.get('https://www.drive.google.com', function(err, res) { 
    if (err) { 
     console.log(err); 
     process.exit(-1); 
    } 

    console.log('is res streamable ? %s\nis res.body streamable ? %s\n', 
     isReadableStream(res), isReadableStream(res.body)); 
}); 

function isReadableStream(obj) { 
    return obj instanceof stream.Stream && 
     typeof obj._read === 'function' && 
     typeof obj._readableState === 'object'; 
} 

然后里面:

// https://github.com/google/google-api-nodejs-client/blob/cc9e138b0e3e507f585d9e38ba3f06ec4da58d1b/lib/apirequest.js#L183-L188 
if (body) { 
    body.pipe(req); 
} 

这时候,他们会管的响应的内容是。

希望这会有所帮助!

相关问题