2017-11-28 10 views
0

実際に私は頭のリクエストをして内容の長さを読むことができません。 私は、この関数を記述しようとした:Googleのアプリスクリプトを使用してURLをダウンロードせずにファイルサイズを取得する方法はありますか?

function getfilesize(url) { 
    var msg = ''; 
    var response; 

    try { 
    response = UrlFetchApp.fetch(url, { 
     // muteHttpExceptions: true, 
     // validateHttpsCertificates: false, 
     followRedirects: true // Default is true anyway. 
    }); 
catch(e) { 
    return e.toString(); 
    } 

var headers = response.getHeaders(); 
     var content_length = NaN; 
     for (var key in headers) { 
     if (key.toLowerCase() == 'Content-Length'.toLowerCase()) { 
      content_length = parseInt(headers[key], 10); 
      break; 
     } 

     } 
return content length; 
} 

が、それは60 sec173mbため1.81619173E8の値を返します。 他の誰かがもっと速くそれを行う方法を提案できますか? google appsスクリプトを使用していますか?

+1

頭を要するかもしれませんか? – epascarello

+0

どのようにですか?これをする。 –

+0

'UrlFetchApp.fetch'が何であるか分かりませんので、メソッドをHEADに変更する方法を手がかりにしていません。 – epascarello

答えて

3

あなたのコードはおそらく正しいでしょう。その1.81619173E8は1816191730バイトで、173MBです。 Content-Lengthは常にバイトです。

MBに変換するには、1024で2回(1回はKBで、もう1回はMBで入れます)に分割します。要求の種類を変更するための

content_length = parseInt(headers[key], 10)/1024/1024; 

は、それが直接HEADを受け付けませんfetch()のように見えますが、あなたはそれを上書きするX-HTTP-Methodヘッダーを使用することができます:それは代わりにHEADを使用して取得する必要があり

response = UrlFetchApp.fetch(url, { 
    method: 'GET', 
    headers: {'X-HTTP-Method-Override': 'HEAD'}, 
    followRedirects: true // Default is true anyway. 
}); 

GETの

+0

ええ、それは正しいですが、それは時間がかかります、どんな方法でもそれを速くすることができます –

+0

@ShubhamSoniあなたはファイル全体をフェッチしています...ただヘッダーのHEADリクエストを作成してください – charlietfl

+0

更新された投稿をチェックしてください。 – samanime

関連する問題