mirror of
https://github.com/KOHGYLW/kiftd-source.git
synced 2025-01-08 12:07:47 +08:00
update to v1.2.0 进一步完善了断点续传功能
This commit is contained in:
parent
04bc21ec6c
commit
6b81cf014e
@ -72,5 +72,5 @@ _提示:源代码路径下包含了一些程序运行所需的非源代码资
|
||||
### 联系作者?
|
||||
如有任何需要(例如对该资源有疑问、意见或建议),请发件联系作者: kohgylw@163.com (青阳龙野),随时恭候您的来信!
|
||||
|
||||
青阳龙野@kohgylw by 2023年12月23日
|
||||
青阳龙野@kohgylw by 2024年01月11日
|
||||
|
||||
|
3
TODO.txt
3
TODO.txt
@ -1,4 +1,4 @@
|
||||
kiftd项目 计划表-2023-12-29 by 青阳龙野
|
||||
kiftd项目 计划表-2024-01-11 by 青阳龙野
|
||||
|
||||
已完成 v1.0.17
|
||||
--------------
|
||||
@ -216,3 +216,4 @@ test.auth.xxx=ucd
|
||||
【已完成】修复了几处在执行文件导入导出操作时可能导致死锁的问题。
|
||||
【已完成】新增“文件”功能的导入账户设置:在账户配置文件中,可通过“import.account=?”设置项来为“文件”功能中的导入操作指定“创建者”。
|
||||
【已完成】进一步完善了移动文件时的提示信息:当用户不具备创建文件夹权限并移动文件夹时,会显示未授权提示。
|
||||
【已完成】进一步完善了断点续传功能。
|
||||
|
@ -154,21 +154,57 @@ public class RangeFileStreamWriter {
|
||||
final String ifRange = request.getHeader("If-Range");
|
||||
if (rangeTag != null && rangeTag.startsWith("bytes=")
|
||||
&& (ifRange == null || ifRange.trim().equals(eTag) || ifRange.trim().equals(lastModified))) {
|
||||
status = HttpServletResponse.SC_PARTIAL_CONTENT;
|
||||
response.setStatus(status);
|
||||
// 进行断点续传
|
||||
rangeBytes = rangeTag.replaceAll("bytes=", "");
|
||||
if (rangeBytes.indexOf("-") < 0) {
|
||||
// 数据范围请求格式不正确,应为?-?的格式
|
||||
status = HttpServletResponse.SC_BAD_REQUEST;
|
||||
response.setStatus(status);
|
||||
return status;
|
||||
}
|
||||
if (rangeBytes.endsWith("-")) {
|
||||
// 解析请求参数范围为仅有起始偏移量而无结束偏移量的情况
|
||||
startOffset = Long.parseLong(rangeBytes.substring(0, rangeBytes.indexOf('-')).trim());
|
||||
try {
|
||||
startOffset = Long.parseLong(rangeBytes.substring(0, rangeBytes.indexOf('-')).trim());
|
||||
} catch (NumberFormatException e) {
|
||||
// 数据范围请求不正确
|
||||
status = HttpServletResponse.SC_BAD_REQUEST;
|
||||
response.setStatus(status);
|
||||
return status;
|
||||
}
|
||||
// 仅具备起始偏移量时,例如文件长为13,请求为5-,则响应体长度为8
|
||||
contentLength = fileLength - startOffset;
|
||||
} else {
|
||||
hasEnd = true;
|
||||
startOffset = Long.parseLong(rangeBytes.substring(0, rangeBytes.indexOf('-')).trim());
|
||||
endOffset = Long.parseLong(rangeBytes.substring(rangeBytes.indexOf('-') + 1).trim());
|
||||
// 具备起始偏移量与结束偏移量时,例如0-9,则响应体长度为10个字节
|
||||
try {
|
||||
if (rangeBytes.startsWith("-")) {
|
||||
// 解析请求参数范围为仅有结束偏移量而无起始偏移量的情况,例如-3
|
||||
startOffset = fileLength
|
||||
- Long.parseLong(rangeBytes.substring(rangeBytes.indexOf('-') + 1).trim());
|
||||
endOffset = fileLength - 1;
|
||||
} else {
|
||||
// 解析请求参数范围既有起始偏移量又有结束偏移量的情况,例如0-9
|
||||
startOffset = Long.parseLong(rangeBytes.substring(0, rangeBytes.indexOf('-')).trim());
|
||||
endOffset = Long.parseLong(rangeBytes.substring(rangeBytes.indexOf('-') + 1).trim());
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
// 数据范围请求不正确
|
||||
status = HttpServletResponse.SC_BAD_REQUEST;
|
||||
response.setStatus(status);
|
||||
return status;
|
||||
}
|
||||
// 具备结束偏移量时,例如文件长为10,请求为0-9或-10,则响应体长度为10
|
||||
contentLength = endOffset - startOffset + 1;
|
||||
}
|
||||
if (contentLength > fileLength || contentLength <= 0) {
|
||||
// 数据范围请求不正确
|
||||
status = HttpServletResponse.SC_REQUESTED_RANGE_NOT_SATISFIABLE;
|
||||
response.setStatus(status);
|
||||
return status;
|
||||
}
|
||||
// 设置响应状态为206
|
||||
status = HttpServletResponse.SC_PARTIAL_CONTENT;
|
||||
response.setStatus(status);
|
||||
// 设置Content-Range,格式为“bytes 起始偏移-结束偏移/文件的总大小”
|
||||
String contentRange;
|
||||
if (!hasEnd) {
|
||||
@ -179,8 +215,9 @@ public class RangeFileStreamWriter {
|
||||
.toString();
|
||||
}
|
||||
response.setHeader("Content-Range", contentRange);
|
||||
} else { // 从开始进行下载
|
||||
contentLength = fileLength; // 客户端要求全文下载
|
||||
} else {
|
||||
// 不进行断点续传
|
||||
contentLength = fileLength;
|
||||
}
|
||||
if (sendBody) {
|
||||
response.setHeader("Content-Length", "" + contentLength);// 设置请求体长度
|
||||
|
@ -1,5 +1,5 @@
|
||||
#Generated by Maven Integration for Eclipse
|
||||
#Mon Jan 08 23:10:33 CST 2024
|
||||
#Thu Jan 11 21:24:52 CST 2024
|
||||
m2e.projectLocation=/Users/kohgylw/Programs/java_workspace/kiftd
|
||||
m2e.projectName=kiftd
|
||||
groupId=kohgylw
|
||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user