Storing images using node.js gives error

孤者浪人 提交于 2020-02-05 14:04:18

问题


I am trying to get an image from wikimedia and the link of the image is

upload.wikimedia.org/wikipedia/commons/thumb/e/e3/AybükeArslan_(3).JPG/220px-AybükeArslan_(3).JPG

But when i try to get the image using node.js the wikimedia server gives error statement as response. But on the browser the URL works perfectly and give the image as response.

The is the error statement

400 Bad Request The server could not comply with the request since it is either malformed or otherwise incorrect. Failed to decode request

And the code is

var http = require('https')
  , fs = require('fs')
  , options

options = {
    host: 'upload.wikimedia.org'
  , port: 443
  , path: '/wikipedia/commons/thumb/e/e3/AybükeArslan_(3).JPG/220px-AybükeArslan_(3).JPG'
}


var request = http.get(options, function(res){
    var imagedata = ''
    res.setEncoding('binary')

    res.on('data', function(chunk){
        imagedata += chunk
    })

    res.on('end', function(){
       console.log(imagedata);
    })

    //trying to store the response as a jpg image which i am failing miserably because the response is a error statement rather than image stream. 
    res.on('end', function(){
        fs.writeFile('image.jpg', imagedata, 'binary', function(err){
            if (err) throw err
            console.log('File saved.')
        })
    })

})

Can anybody help? stuck in to it for a long time.


回答1:


Because you have uncoded string in url. Use encodeURI

UPDATED

var http = require('https')
  , fs = require('fs')
  , options;

options = {
    hostname: 'upload.wikimedia.org'
  , port: 443
  , path: encodeURI('/wikipedia/commons/thumb/e/e3/AybükeArslan_(3).JPG/220px-AybükeArslan_(3).JPG')
};

var request = http.get(options, function(res){
    var imagedata = '';
    res.setEncoding('binary');

    res.on('data', function(chunk){
        imagedata += chunk
    });

    res.on('end', function(){
       console.log(imagedata);
    });

    //trying to store the response as a jpg image which i am failing miserably because the response is a error statement rather than image stream. 
    res.on('end', function(){
        fs.writeFile('image.jpg', imagedata, 'binary', function(err){
            if (err) throw err;
            console.log('File saved.');
        });
    })
});



回答2:


I Asked a separate question to find the answer, There is some problem with hidden characters which are not visible in sublime, That causes the error, In the question the code i mentioned was completely right, For further details read below answer

String has hidden characters, Can't able to verify ,



来源:https://stackoverflow.com/questions/38099262/storing-images-using-node-js-gives-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!