6

ノードjsと画像ダウンローダーで遊んでいます。URLとの問題に遭遇しましたがhttp.get、URLにクエリにスペースが含まれていると失敗しました。自分でURLパスだけをエスケープすることで、問題を回避することができました。パス変数を使用url.parse()すると、最初のスペースで切り捨てられます。私の解決策は機能しますが、もっと良い解決策があるかどうか疑問に思いました。

function downloadFileFromURL( file_url, callback ) 
{
    //-------------
    // really complicated way to get a http.get save path
    var protocol = url.parse( file_url).protocol;
    var host = url.parse( file_url ).host;
    var full_domain =  protocol + '//' + host;
    var escaped_path =  escape(file_url.substring( full_domain.length ));

    var options = {
        host: host
      , port: 80
      , path: escaped_path
    }

    var file_url_info = url.parse( file_url );
    var file_path = path.join( __dirname, 'images', path.basename(file_url) );

    var request = http.get( options , function(res){

        var imagedata = ''
        res.setEncoding('binary')

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

        res.on('end', function(){

            fs.writeFile( file_path, imagedata, 'binary', function(err){
                if (err) callback( err );
                else {
                    callback( null, file_path );
                }
            })
        })

    })
}
4

1 に答える 1

10

実行してみてくださいencodeURI

var encoded_url = encodeURI(file_url);
于 2012-07-23T18:29:01.427 に答える