content-type 有时为空
This commit is contained in:
parent
90d4f7528b
commit
2a0682ea22
|
|
@ -135,75 +135,75 @@ public class ProxyVideo {
|
||||||
}
|
}
|
||||||
String range = StringUtils.isAllBlank(headers.get("range")) ? headers.get("Range") : headers.get("range");
|
String range = StringUtils.isAllBlank(headers.get("range")) ? headers.get("Range") : headers.get("range");
|
||||||
SpiderDebug.log("---proxyMultiThread,Range:" + range);
|
SpiderDebug.log("---proxyMultiThread,Range:" + range);
|
||||||
|
|
||||||
|
//没有range,强行给他一个range,让他去分片
|
||||||
|
if (StringUtils.isAllBlank(range)) {
|
||||||
|
range = "bytes=0-";
|
||||||
|
}
|
||||||
|
|
||||||
Map<String, String> rangeObj = parseRange(range);
|
Map<String, String> rangeObj = parseRange(range);
|
||||||
//没有range,无需分割
|
List<long[]> partList = generatePart(rangeObj, total);
|
||||||
if (rangeObj == null) {
|
|
||||||
SpiderDebug.log("没有range,无需分割");
|
|
||||||
return proxy(url, headers);
|
|
||||||
} else {
|
|
||||||
List<long[]> partList = generatePart(rangeObj, total);
|
|
||||||
|
|
||||||
// 存储执行结果的List
|
// 存储执行结果的List
|
||||||
List<Future<Response>> results = new ArrayList<>();
|
List<Future<Response>> results = new ArrayList<>();
|
||||||
for (long[] part : partList) {
|
for (long[] part : partList) {
|
||||||
|
|
||||||
String newRange = "bytes=" + part[0] + "-" + part[1];
|
String newRange = "bytes=" + part[0] + "-" + part[1];
|
||||||
SpiderDebug.log("下载开始" + ";newRange:" + newRange);
|
SpiderDebug.log("下载开始" + ";newRange:" + newRange);
|
||||||
|
|
||||||
Map<String, String> headerNew = new HashMap<>(headers);
|
Map<String, String> headerNew = new HashMap<>(headers);
|
||||||
|
|
||||||
headerNew.put("range", newRange);
|
headerNew.put("range", newRange);
|
||||||
headerNew.put("Range", newRange);
|
headerNew.put("Range", newRange);
|
||||||
Future<Response> result = service.submit(() -> {
|
Future<Response> result = service.submit(() -> {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
return OkHttp.newCall(url, headerNew);
|
return OkHttp.newCall(url, headerNew);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
results.add(result);
|
results.add(result);
|
||||||
}
|
}
|
||||||
List<InputStream> inputStreams = new ArrayList<>();
|
List<InputStream> inputStreams = new ArrayList<>();
|
||||||
|
|
||||||
for (int i = 0; i < THREAD_NUM; i++) {
|
for (int i = 0; i < THREAD_NUM; i++) {
|
||||||
// 获取包含返回结果的future对象
|
// 获取包含返回结果的future对象
|
||||||
Future<Response> future = results.get(i);
|
Future<Response> future = results.get(i);
|
||||||
// 从future中取出执行结果(若尚未返回结果,则get方法被阻塞,直到结果被返回为止)
|
// 从future中取出执行结果(若尚未返回结果,则get方法被阻塞,直到结果被返回为止)
|
||||||
Response response = future.get();
|
Response response = future.get();
|
||||||
okhttp3.ResponseBody body = response.body();
|
okhttp3.ResponseBody body = response.body();
|
||||||
/* int bytesRead;
|
/* int bytesRead;
|
||||||
while ((bytesRead = body.byteStream().read(bytes)) != -1) {
|
while ((bytesRead = body.byteStream().read(bytes)) != -1) {
|
||||||
out.write(bytes, 0, bytesRead);
|
out.write(bytes, 0, bytesRead);
|
||||||
}*/
|
}*/
|
||||||
inputStreams.add(body.byteStream());
|
inputStreams.add(body.byteStream());
|
||||||
|
|
||||||
|
|
||||||
SpiderDebug.log("---第" + i + "块下载完成" + ";Content-Range:" + response.headers().get("Content-Range"));
|
SpiderDebug.log("---第" + i + "块下载完成" + ";Content-Range:" + response.headers().get("Content-Range"));
|
||||||
SpiderDebug.log("---第" + i + "块下载完成" + ";content-range:" + response.headers().get("content-range"));
|
SpiderDebug.log("---第" + i + "块下载完成" + ";content-range:" + response.headers().get("content-range"));
|
||||||
|
|
||||||
}
|
}
|
||||||
in = new SequenceInputStream(new Vector<>(inputStreams).elements());
|
in = new SequenceInputStream(new Vector<>(inputStreams).elements());
|
||||||
service.shutdown();
|
service.shutdown();
|
||||||
String contentType = StringUtils.isAllBlank(resHeader.get("Content-Type")) ? resHeader.get("content-type") : resHeader.get("Content-Type");
|
String contentType = StringUtils.isAllBlank(resHeader.get("Content-Type")) ? resHeader.get("content-type") : resHeader.get("Content-Type");
|
||||||
String contentDisposition = resHeader.get("Content-Disposition");
|
String contentDisposition = resHeader.get("Content-Disposition");
|
||||||
if (contentDisposition != null && StringUtils.isAllBlank(contentType)) {
|
if (contentDisposition != null && StringUtils.isAllBlank(contentType)) {
|
||||||
contentType = getMimeType(contentDisposition);
|
contentType = getMimeType(contentDisposition);
|
||||||
}
|
}
|
||||||
/* respHeaders.put("Access-Control-Allow-Credentials", "true");
|
/* respHeaders.put("Access-Control-Allow-Credentials", "true");
|
||||||
respHeaders.put("Access-Control-Allow-Origin", "*");*/
|
respHeaders.put("Access-Control-Allow-Origin", "*");*/
|
||||||
|
|
||||||
|
|
||||||
resHeader.put("Content-Length", String.valueOf(partList.get(THREAD_NUM - 1)[1] - partList.get(0)[0] + 1));
|
resHeader.put("Content-Length", String.valueOf(partList.get(THREAD_NUM - 1)[1] - partList.get(0)[0] + 1));
|
||||||
// respHeaders.put("content-length", String.valueOf(bytes.length));
|
// respHeaders.put("content-length", String.valueOf(bytes.length));
|
||||||
resHeader.put("Content-Range", String.format("bytes %s-%s/%s", partList.get(0)[0], partList.get(THREAD_NUM - 1)[1], total));
|
resHeader.put("Content-Range", String.format("bytes %s-%s/%s", partList.get(0)[0], partList.get(THREAD_NUM - 1)[1], total));
|
||||||
// respHeaders.put("content-range", String.format("bytes %s-%s/%s", partList.get(0)[0], partList.get(THREAD_NUM - 1)[1], total));
|
// respHeaders.put("content-range", String.format("bytes %s-%s/%s", partList.get(0)[0], partList.get(THREAD_NUM - 1)[1], total));
|
||||||
SpiderDebug.log("++proxy res contentType:" + contentType);
|
SpiderDebug.log("++proxy res contentType:" + contentType);
|
||||||
// SpiderDebug.log("++proxy res body:" + response.body());
|
// SpiderDebug.log("++proxy res body:" + response.body());
|
||||||
SpiderDebug.log("++proxy res respHeaders:" + Json.toJson(resHeader));
|
SpiderDebug.log("++proxy res respHeaders:" + Json.toJson(resHeader));
|
||||||
return new Object[]{206, contentType, in, resHeader};
|
return new Object[]{206, contentType, in, resHeader};
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
SpiderDebug.log("proxyMultiThread error:" + e.getMessage());
|
SpiderDebug.log("proxyMultiThread error:" + e.getMessage());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue