2014-11-04 5 views
7

का अनुरोध कर सकता हूं मैं node.js और request library के साथ एक छवि को सहेजना चाहता हूं। अब तक मेरे पास यह सरल कोड है:node.js के साथ एक दूरस्थ छवि को सहेज नहीं सकता है और

var request = require('request'); 
var fs = require('fs'); 

request('http://upload.wikimedia.org/wikipedia/commons/8/8c/JPEG_example_JPG_RIP_025.jpg', function(error, response, body) 
{ 
    // further logic that decides 
    // whether or not the image will be saved 

    fs.writeFile('downloaded.jpg', body, function(){}); 
}); 

लेकिन यह काम नहीं करता है। छवि हमेशा भ्रष्ट आती है। मुझे लगता है कि यह एक एन्कोडिंग त्रुटि है लेकिन मैं यह नहीं समझ सकता कि इसे कैसे ठीक किया जाए।

उत्तर

20
var request = require('request'), 
    fs  = require('fs'), 
    url  = 'http://upload.wikimedia.org/wikipedia/commons/8/8c/JPEG_example_JPG_RIP_025.jpg'; 

request(url, {encoding: 'binary'}, function(error, response, body) { 
    fs.writeFile('downloaded.jpg', body, 'binary', function (err) {}); 
}); 
+1

यह काम करता है, धन्यवाद! –

3
var fs = require('fs'), 
    request = require('request'), 
    url='http://upload.wikimedia.org/wikipedia/commons/8/8c/JPEG_example_JPG_RIP_025.jpg'; 

request(url).pipe(fs.createWriteStream('downloaded.jpg')); 
+0

मैंने स्ट्रीमिंग संस्करण का उपयोग कर अनुरोध पृष्ठ पर उदाहरण देखे हैं। हालांकि यह आम तौर पर काम करता है मुझे कॉलबैक का उपयोग करने वाले संस्करण की आवश्यकता होती है क्योंकि मेरे पास कुछ और तर्क चल रहा है जो यह तय करता है कि छवि सहेजी जाएगी या नहीं। लेकिन आपके जवाब के लिए thx! –

1

यहाँ मैं यह stream और pipe का उपयोग कर, कैसे किया (मैं express उपयोग कर रहा था, लेकिन आपको लगता है कि आवश्यकता नहीं होती है)

var express = require('express'); 
var app = express(); 
var filesystem = require('fs'); 
var https = require('https'); 


var download = function(url, dest, cb) { 
    var file = filesystem.createWriteStream(dest); 
    var request = https.get(url, function(httpResponse) { 
    httpResponse.pipe(file); 
    file.on('finish', function() { 
     console.log("piping to file finished") 
     file.close(cb); // close() is async, call cb after close completes. 
    }); 
    }).on('error', function(err) { // Handle errors 
    filesystem.unlink(dest); // Delete the file async. (But we don't check the result) 
    if (cb) cb(err.message); 
    }); 
}; 

app.get('/image', (req, res) => { 
download('https://lastfm-img2.akamaized.net/i/u/64s/15cc734fb0e045e3baac02674d2092d6.png', 
      'porcupine.png', 
      () => {console.log("downloaded to porcupine.png")}) 
}) 

जब मैं node server.js का उपयोग करके चलाए और यूआरएल localhost:3000/image मारा, यह मूल निर्देशिका में फ़ाइल को porcupine.png पर डाउनलोड और सहेज लेगा।

+0

यह बहुत सी चीजें हैं जिनसे मैंने नहीं पूछा था, लेकिन मुझे यकीन है कि यह किसी के लिए सहायक होगा। साझा करने के लिए धन्यवाद! –

संबंधित मुद्दे