12
A
答えて
22
、あなたはこのような何かを行うことができます:あなたはこの値のURLConnectionオブジェクトを照会することができるように
private static int getFileSize(URL url) {
URLConnection conn = null;
try {
conn = url.openConnection();
if(conn instanceof HttpURLConnection) {
((HttpURLConnection)conn).setRequestMethod("HEAD");
}
conn.getInputStream();
return conn.getContentLength();
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
if(conn instanceof HttpURLConnection) {
((HttpURLConnection)conn).disconnect();
}
}
}
6
は、HTTP HEADメソッドを使用してみてください。 HTTPヘッダーのみを返します。ヘッダContent-Length
には必要な情報が含まれているはずです。
2
URL接続ですでにgetContentLengthを試しましたか? サーバーが有効なヘッダーに応答する場合は、文書のサイズを取得する必要があります。
しかし、Webサーバーもファイルをチャンクで返す可能性があることに注意してください。この場合、IIRCのコンテンツ長メソッドは、1つのチャンク(< = 1.4)または-1(> 1.4)のいずれかのサイズを返します。 HEADリクエストを使用して
は
3
HTTPレスポンスは、Content-Lengthヘッダを持っています。 URL接続が開かれた後、あなたがこのような何か試すことができます
:
List values = urlConnection.getHeaderFields().get("content-Length")
if (values != null && !values.isEmpty()) {
// getHeaderFields() returns a Map with key=(String) header
// name, value = List of String values for that header field.
// just use the first value here.
String sLength = (String) values.get(0);
if (sLength != null) {
//parse the length into an integer...
...
}
}
0
あなたはこれを試すことができますが...
private long getContentLength(HttpURLConnection conn) {
String transferEncoding = conn.getHeaderField("Transfer-Encoding");
if (transferEncoding == null || transferEncoding.equalsIgnoreCase("chunked")) {
return conn.getHeaderFieldInt("Content-Length", -1);
} else {
return -1;
}
3
受け入れ答えは、NullPointerException
になりやすいしないでファイル> 2GiBで動作し、getInputStream()
への不要な呼び出しが含まれています。固定コードは次のとおりです。
public long getFileSize(URL url) {
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("HEAD");
return conn.getContentLengthLong();
} catch (IOException e) {
return -1;
// Or wrap into a (custom, if desired) RuntimeException so exceptions are propagated.
// throw new RuntimeException(e);
// Alternatively you can just propagate IOException, but, urgh.
} finally {
if (conn != null) {
conn.disconnect();
}
}
}
関連する問題
- 1. PHP、whileループからの合計を計算する方法は?
- 2. トレントのスクレイプURLを計算する方法
- 3. JavaScriptを使用してファイルサイズを計算する
- 4. ffmpegの出力ファイルサイズを計算するには?
- 5. クライアントデータセットで計算フィールドと内部計算フィールドを再計算する方法
- 6. ポリゴンから地理距離を計算する方法は?
- 7. フレックス計算からdiv(フレックスアイテム)を除外する方法は?
- 8. タイムスタンプからタイムスパンを計算する方法は?
- 9. 決定木からエラー率を計算する方法は?
- 10. エイリアスからすべての行のフィールドの合計を計算する方法
- 11. タイムスタンプから計算する
- 12. ハンドルバーテンプレートからバックボーンモデルの計算フィールドにアクセスする方法は?
- 13. GWT戦争ファイルサイズを減らす方法
- 14. glslでgl_FragCoordを計算する方法
- 15. ワード数を計算する方法
- 16. 興味を計算する方法
- 17. 計算カラムを選択する方法
- 18. JavaでCRC8を計算する方法
- 19. PHPでcrc16を計算する方法
- 20. ポストグルでパーセンタイルを計算する方法
- 21. プライマリインデックスを再計算する方法は?
- 22. UIFontのサイズを計算する方法
- 23. ビットマップサイズを計算する方法は?
- 24. FATを計算する方法
- 25. ファイルサイズを格納する効率と毎回計算する効率?
- 26. 値のテーブルから算術演算を計算する
- 27. emから行の高さを計算する方法はありますか?
- 28. serialversionuidの計算方法
- 29. AdMob収益 - 計算方法
- 30. タイムコードの計算方法は?
恐らく、正確なサイズを取得するには、ファイルを少なくとも1回ダウンロードする必要があります。 (あなたは将来保存することができますが、ファイルがサーバー上で変更された場合、データは古くなります) – Nishant
@Nishantそれは当てはまりません。 'HTTP HEAD'リクエストは' HTTP GET'リクエストをした場合に得られる情報を返します。リクエストには返されたリクエストのサイズが含まれていなければなりません。確かに 'HEAD'リクエストを行い、レスポンスを解析することができます。 – Thor84no
ああ、ok。知っておくといい。ありがとう@ Thor84no – Nishant