私はこのような応答を作成しようとしています
-------------リクエスト-----------HEAD/external/images/media/21.jpg HTTP / 1.0
getcontentFeatures.dlna.org:1
ホスト:192.168.1.130:57645
-----------私の希望する答え------------------HTTP/ 1.1 200 OK
日付:2012年8月21日火曜日10:24:59 GMT
キャッシュ制御:キャッシュなし
transferMode.dlna.org:ストリーミング
contentFeatures.dlna.org:DLNA.ORG_PN = JPEG_LRG; DLNA.ORG_OP = 01; DLNA.ORG_CI = 0
コンテンツタイプ:image / jpeg
最終変更日:2012年2月25日土曜日15:11:58 GMT
コンテンツ-長さ:60909
Accept-Ranges:バイト
しかし、「Content-Length:60909」を入れようとすると、この例外がスローされます。「Content-Lengthヘッダーはすでに存在します」。ヘッダーを入れない場合、Content-Lengthは常に0なので、希望どおりではありません。
これは私のコードです:
public void handle(HttpRequest request,
HttpResponse response,
HttpContext context) throws HttpException, IOException {
String method = request.getRequestLine().getMethod().toUpperCase(Locale.ENGLISH);
if(method.equals("HEAD"))
{
String objectId = getUrlBuilder().getObjectId(request.getRequestLine().getUri());
DIDLObject obj = findObjectWithId(objectId);
if (obj == null) {
response.setStatusCode(HttpStatus.SC_NOT_FOUND);
return;
}
MimeType mimeType = getMimeType(obj);
long sizeInBytes = getSizeInBytes(obj);
response.setHeader("Cache-control", "no-cache");
response.setHeader("transferMode.dlna.org", "Streaming");
String aMimeType = mimeType.toString();
String dlnaspec="";
if (aMimeType.equals("image/jpeg"))
dlnaspec = "DLNA.ORG_PN=JPEG_LRG";
else if (aMimeType.equals("audio/mpeg"))
dlnaspec = "DLNA.ORG_PN=MP3";
else if (aMimeType.equals("audio/L16") || aMimeType.equals("audio/wav"))
dlnaspec = "DLNA.ORG_PN=LPCM";
response.setHeader("contentFeatures.dlna.org", dlnaspec+";DLNA.ORG_OP=01;DLNA.ORG_CI=0");
response.setHeader("Content-Type", mimeType.toString());
response.setHeader("Accept-Ranges", "bytes");
response.setHeader("Content-Length", String.valueOf(sizeInBytes));
response.setStatusCode(HttpStatus.SC_OK);
}
}
何か案は?私もこのようにエンティティを配置しようとしました
ByteArrayInputStream stream=new ByteArrayInputStream(new byte[(int) sizeInBytes]);
InputStreamEntity entity = new InputStreamEntity(stream, sizeInBytes);
response.setEntity(entity);
しかし問題は、HEADメソッドには本体がないため、このアプローチは有効ではないということです。