2012-07-22 73 views
3

玩節點js和圖像下載。我偶然發現了一個與urls和http.get有關的問題,如果url中包含查詢中的空格,那麼這個問題會失敗。我設法通過自己逃脫url路徑來解決問題。如果我使用url.parse(),路徑變量將在第一個空格處被切斷。我的解決方案有效,但我想知道是否有更好的解決方案。http.get與空間的網址

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); 
       } 
      }) 
     }) 

    }) 
} 
+0

空間來自哪裏? – Neil 2012-07-22 23:22:15

+0

有效的URL不允許包含未轉義的空格。 'downloadFileFromURL'的參數來自哪裏? – ebohlman 2012-07-23 03:52:56

+0

它是一個像這樣的圖像的路徑,解析出一個rss feed:'http://payload71.cargocollective.com/1/0/31246/3728074/13-Screen Shot 2012-07-05 at 12.28。 08 PM.png' – 2012-07-23 08:37:50

回答

7

嘗試通過encodeURI運行它。

var encoded_url = encodeURI(file_url); 
+0

這使得'http://payload74.cargocollective.com/1/0/31246/3793794/NIKE- Inc. - 耐克和湯姆薩克斯禮物Tom Sachs-NIKECraft.png' 以下: '%2F1%2f0的%2F31246%2F3793794%2FNIKE-%20Inc%20-%20Nike%20於是%20Tom%20Sachs%20present%20Tom%20Sachs-%20NIKECraft.png' – 2012-07-23 22:08:59

+0

實際上只是注意到,在您的鏈接: 'string.replace(searchvalue,newvalue)'將會是一條路,只需要替換空格,剩下其他的 – 2012-07-23 22:16:23

+0

@ThomasTraum你是對的。我認爲你想encodeURI而不是encodeURIComponent – 2012-07-24 00:11:05