Sel*_*ish 8 fs node.js promise bluebird node-request
我一直在努力成功下载图像而不用它将它传递给fs.这就是我所取得的成就:
var Promise = require('bluebird'),
fs = Promise.promisifyAll(require('fs')),
requestAsync = Promise.promisify(require('request'));
function downloadImage(uri, filename){
return requestAsync(uri)
.spread(function (response, body) {
if (response.statusCode != 200) return Promise.resolve();
return fs.writeFileAsync(filename, body);
})
.then(function () { ... })
// ...
}
Run Code Online (Sandbox Code Playgroud)
有效输入可能是:
downloadImage('http://goo.gl/5FiLfb', 'c:\\thanks.jpg');
Run Code Online (Sandbox Code Playgroud)
我确实认为问题在于处理问题body.我已经尝试将其转换为Buffer(new Buffer(body, 'binary')等)几种编码,但都失败了.
感谢前方的任何帮助!
rob*_*lep 20
你必须告诉request数据是二进制的:
requestAsync(uri, { encoding : null })
Run Code Online (Sandbox Code Playgroud)
记录在这里:
encoding- 用于响应数据的setEncoding的编码.如果为null,则将主体作为Buffer返回.其他任何东西(包括默认值undefined)将作为encoding参数传递给toString()(这意味着默认情况下这实际上是utf8).
因此,如果没有该选项,正文数据将被解释为UTF-8编码,而不是(并生成无效的JPEG文件).
| 归档时间: |
|
| 查看次数: |
6064 次 |
| 最近记录: |