我有一个使用表单数据模块的客户端代码来命中一个返回内容类型的image / jpeg的url。以下是我的代码
var FormData = require('form-data');
var fs = require('fs');
var form = new FormData();
//form.append('POLICE', "hello");
//form.append('PAYSLIP', fs.createReadStream("./Desert.jpg"));
console.log(form);
//https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xfp1/v/t1.0- 1/c8.0.50.50/p50x50/10934065_1389946604648669_2362155902065290483_n.jpg?oh=13640f19512fc3686063a4703494c6c1&oe=55ADC7C8&__gda__=1436921313_bf58cbf91270adcd7b29241838f7d01a
form.submit({
protocol: 'https:',
host: 'fbcdn-profile-a.akamaihd.net',
path: '/hprofile-ak-xfp1/v/t1.0-1/c8.0.50.50/p50x50/10934065_1389946604648669_2362155902065290483_n.jpg?oh=13640f19512fc3686063a3494c6c1&oe=55ADCC8&__gda__=1436921313_bf58cbf91270adcd7b2924183',
method: 'get'
}, function (err, res) {
var data = "";
res.on("data", function (chunks) {
data += chunks;
});
res.on("end", function () {
console.log(data);
console.log("Response Headers - " + JSON.stringify(res.headers));
});
});
我收到一些块数据,收到的响应标题是
{"last-modified":"Thu, 12 Feb 2015 09:49:26 GMT","content-type":"image/jpeg","timing-allow-origin":"*","access-control-allow-origin":"*","content-length":"1443","cache-control":"no-transform, max-age=1209600","expires":"Thu, 30 Apr 2015 07:05:31 GMT","date":"Thu, 16 Apr 2015 07:05:31 GMT","connection":"keep-alive"}
我现在被困在如何处理我收到的响应到正确的图像。我尝试了base64解码,但它似乎是一个错误的方法任何帮助将不胜感激。
答案 0 :(得分:1)
我希望文件完全下载后data
包含Buffer。
如果是这种情况,您应该按原样将缓冲区写入文件:
fs.writeFile('path/to/file.jpg', data, function onFinished (err) {
// Handle possible error
})
请参阅fs.writeFile()文档 - 您将看到它接受字符串或缓冲区作为数据输入。
由于res
对象是可读流,因此您只需将数据直接传送到文件,而无需将其保存在内存中。这样做的另一个好处是,如果您下载非常大的文件,Node.js将不必将整个文件保留在内存中(就像现在一样),但会在文件系统到达时将其连续写入文件系统。
form.submit({
// ...
}, function (err, res) {
// res is a readable stream, so let's pipe it to the filesystem
var file = fs.createWriteStream('path/to/file.jpg')
res.on('end', function writeDone (err) {
// File is saved, unless err happened
})
.pipe(file) // Send the incoming file to the filesystem
})
答案 1 :(得分:0)
你得到的块是原始图像。使用图像执行任何操作,将其保存到磁盘,让用户下载,无论如何。
答案 2 :(得分:0)
因此,如果我清楚地理解您的问题,您希望从HTTP端点下载文件并将其保存到您的计算机,对吧?如果是这样,您应该考虑使用request模块而不是使用表单数据。
以下是使用请求下载内容的人为举例:
var fs = require('fs');
var request = require('request')
request('http://www.example.com/picture.jpg')
.pipe(fs.createWriteStream('picture.jpg'))
其中'picture.jpg'
是保存到磁盘的位置。您可以使用普通文件浏览器打开它。