我正在尝试创建这样的响应
-------------请求----------- 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
缓存控制:无缓存
transferMode.dlna.org:流媒体
contentFeatures.dlna.org:DLNA.ORG_PN=JPEG_LRG;DLNA.ORG_OP=01;DLNA.ORG_CI=0
内容类型:图片/jpeg
最后修改时间:2012 年 2 月 25 日星期六 15:11:58 GMT
内容长度:60909
接受范围:字节
但是当我尝试输入“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 方法没有主体,所以这种方法无效