2015-10-17 71 views
0

我想使用Node和请求模块将远程图像上传到我自己的服务器。我已经弄清楚如何使用下面的代码上传本地图片:如何在Node/request中上传远程图像?

var options = { 
    url: 'https://myownserver.com/images' 
}; 
var req = request.post(options , function optionalCallback(err, httpResponse, body) { 
    console.log('Upload successful! Server responded with:', body); 
}); 

var form = req.form(); 
form.append('file', fs.createReadStream(__dirname + '/testimg.png')); 

我需要什么修改,使这个代码能够上传远程图像?这是我一直在使用的图像:https://www.filepicker.io/api/file/egqDUkbMQlmz7lqKYTZO

我试过在远程URL上使用fs.createReadStream,但没有成功。如果可能的话,我宁愿不必在将图像上传到我自己的服务器之前在本地保存图像。

回答

0

这是一段代码,我正在使用一个刮板。我在这里使用回调,因此我可以在保存到我的模型时使用它作为位置。我在下面放置图像的位置,但在我的代码中,我使用了req.body.image。

var downloadURI = function(url, filename, callback) { 

    request(url) 
    .pipe(fs.createWriteStream(filename)) 
    .on('close', function() { 
     callback(filename); 
    }); 
}; 

downloadURI('https://myownserver.com/images', __dirname + '/testimg.png', function(filename) { 
console.log(done); 
} 
+0

Thx - 工作得很好 - 出于好奇,是否可以在不创建任何文件的情况下做同样的事情?或者这只是一个必要的步骤? – wayman

+0

很高兴我能帮到你。如果这回答你的问题,那么请接受它作为正确的答案。 - 这只是另一种使用请求的方式,我们在响应主体中进行流式传输并保存。一个典型的用途是当你抓一页,然后收集数据做一些事情。所以它看起来像︰request(url,function(error,response,body){...} – venturz909