質問
思決定の種類のファイルはUTF-8)による読書のファイルを分析します。(タイプに特有の私のコミュニティ下にない私の制御となMIME/MediaType通常TEXT_PLAIN).を使用している"org.restletライブラリー、クライアントの分析にはヘッダー付き
Request request = new Request(Method.HEAD, url);
く知っているコンテンツ長できる(必要な場合には可能な推定バイト数をいうダウンロードの解析
解明:利用できなくなりました。はMediaType.からの回答1のよう出張など、国内の宿探しのお得な内容です。訂正が疑問に思うのです:
"で取得します 部分 ファイルを使用Restlet?"
回答:次のコードはなんです。していま算@BalusCを表示します。くださいコメントしている場合は逃したもの:
public String readFirstChunk(String urlString, int byteCount) {
String text = null;
if (urlString != null) {
org.restlet.Client restletClient = new org.restlet.Client(Protocol.HTTP);
Request request = new Request(Method.GET, urlString);
List<Range> ranges = Collections.singletonList(new Range(0, byteCount));
request.setRanges(ranges);
Response response = restletClient.handle(request);
if (Status.SUCCESS_OK.equals(response.getStatus())) {
text = processSuccessfulChunkRequest(response);
} else if (Status.SUCCESS_PARTIAL_CONTENT .equals(response.getStatus())) {
text = processSuccessfulChunkRequest(response);
} else {
System.err.println("FAILED "+response.getStatus());
}
}
return text;
}
private String processSuccessfulChunkRequest(Response response) {
String text = null;
try {
text = response.getEntity().getText();
} catch (IOException e) {
throw new RuntimeException("Cannot download chunk", e);
}
return text;
}
解決
これは当たり前のことを可能にするサーバに送る Accept-Ranges
や Content-Range
ヘッダと共に ETag
または Last-Modified
.E.g.
Accept-Ranges: bytes
Content-Range: bytes 0-1233/1234
ETag: file.ext_1234_1234567890
の Accept-Ranges: bytes
ることを示し、サーバがサポートの要望に戻一部のコンテンツは、指定されたバイトです。の Content-Range
ヘッダー通知の長さです。の ETag
や Last-Modified
の独自のファイルidenfierまたは最終更新者のタイムスタンプの資源の裏には請求URIです。
い場合にはヘッダに対応しを要求することが可能ですの資源を使用 If-Range
や Range
リクエストヘッダとそれぞれの独自のファイルの識別子の最後に変更されたタイムスタンプを所望のバイトです。
If-Range: file.ext_1234_1234567890
Range: bytes=0-99
上記の例を返します最初の100バイトのファイルです。
他のヒント
ヘッド動作は、HTTP標準によって定義されるように離間ヘッダ情報から任意のコンテンツを返しません。あなたは頭のリクエストを送信しているのであれば、あなただけのHTTPレスポンスヘッダからファイルのMIMEタイプを調べることができます。
ヘッダ情報はClientResourceにそれをラップし、HEAD要求を行うから返さ表現を見ることによって得ることができます。これはあなたのHTTPトランスポートへの高レベルのインタフェースを提供し、カスタムヘッダー解析を行う必要はありません。
ClientResource resource = new ClientResource(url);
Representation representation = resource.head();
representation.getMediaType(); // returns the Media Type
あなたは、ファイルの実際の内容に推測したコンテンツタイプを行いたい場合は、は、あなたがそのリソースに対するGETリクエストで、たとえば、実際のコンテンツをダウンロードする必要があります。
または真のREST方式でそのファイルのためのカスタムメタ情報を返すでしょう、あなたのリソースのための余分なクエリパラメータ、例えばをモデル化することができます。
http://server/file?contentType
同様に、、実際のコンテンツを取得するために、あなたは、ストリームのハンドルを得ることができ、その後、あなたは推測エンコードん。
Representation representation = resource.get();
InputStream stream = representation.getStream();
サーバーでサポートされている場合は、の範囲を指定するには、あなたのGETリクエストを送信する前に、範囲を設定することができます。
List<Range> ranges = new ArrayList<Range>();
ranges.add(new Range(0,100)); // this would request the first 100 bytes
resource.setRanges(ranges);
Representation representation = resource.get();
あなたが返す前に、完全応答(ストリーム)を消費してください。
私はあなたがコンテンツタイプを決定する助け、他の努力になります示唆しています。 同様に、ここで Javaの文字セットとWindowsする または http://glaforge.free.fr/wiki/index.php?wiki = GuessEncoding の