Merge remote-tracking branch 'base-version/main' into test

This commit is contained in:
chenbowen
2025-09-24 14:23:56 +08:00
6 changed files with 67 additions and 30 deletions

View File

@@ -263,6 +263,15 @@ public class DocFileController {
return success(true);
}
@GetMapping("/get-file-token")
@Operation(summary = "根据fileId获取文件访问Token")
@PreAuthorize("@ss.hasPermission('infra:doc:query')")
public CommonResult<String> getFileToken(@RequestParam("fileId") Long fileId) {
// 使用service中的公共方法生成文件访问token
String fileToken = docFileService.generateFileToken(fileId);
return success(fileToken);
}
/**
* 获取客户端真实IP地址
*/

View File

@@ -169,4 +169,12 @@ public interface DocFileService {
*/
void restoreDocFileToVersion(Long docFileId, Long versionId);
/**
* 生成文件访问Token
*
* @param fileId 文件编号
* @return JWT token
*/
String generateFileToken(Long fileId);
}

View File

@@ -285,17 +285,7 @@ public class DocFileServiceImpl implements DocFileService {
respVO.setFileSize(fileInfo.getSize().longValue());
// 生成文件访问的JWT token
String fileToken = "";
if (StrUtil.isNotBlank(onlyOfficeJwtSecret)) {
// 创建文件访问token包含fileId和过期时间1小时后过期
long expTime = System.currentTimeMillis() / 1000 + 3600; // 1小时后过期
fileToken = JWT.create()
.setPayload("fileId", doc.getFileId())
.setPayload("exp", expTime)
.setPayload("iat", System.currentTimeMillis() / 1000)
.setKey(onlyOfficeJwtSecret.getBytes())
.sign();
}
String fileToken = generateFileToken(doc.getFileId());
// 使用新的接口生成文件URL包含JWT token
String fileUrl = StrUtil.removeSuffix(onlyOfficeCallbackBaseUrl, "/") + "/admin-api/infra/doc-file/file-content?fileId=" + doc.getFileId();
@@ -422,17 +412,7 @@ public class DocFileServiceImpl implements DocFileService {
String fileUrl = "";
if (doc.getFileId() != null) {
// 生成文件访问的JWT token
String fileToken = "";
if (StrUtil.isNotBlank(onlyOfficeJwtSecret)) {
// 创建文件访问token包含fileId和过期时间1小时后过期
long expTime = System.currentTimeMillis() / 1000 + 3600; // 1小时后过期
fileToken = JWT.create()
.setPayload("fileId", doc.getFileId())
.setPayload("exp", expTime)
.setPayload("iat", System.currentTimeMillis() / 1000)
.setKey(onlyOfficeJwtSecret.getBytes())
.sign();
}
String fileToken = generateFileToken(doc.getFileId());
// 生成通过新接口访问文件的URL包含JWT token
fileUrl = StrUtil.removeSuffix(onlyOfficeCallbackBaseUrl, "/") + "/admin-api/infra/doc-file/file-content?fileId=" + doc.getFileId();
@@ -845,5 +825,21 @@ public class DocFileServiceImpl implements DocFileService {
log.info("文档版本恢复完成: docId={}, 恢复到版本={}, 新版本={}",
docFileId, version.getVersionNo(), newVersionNo);
}
@Override
public String generateFileToken(Long fileId) {
String fileToken = "";
if (StrUtil.isNotBlank(onlyOfficeJwtSecret)) {
// 创建文件访问token包含fileId和过期时间1小时后过期
long expTime = System.currentTimeMillis() / 1000 + 3600; // 1小时后过期
fileToken = JWT.create()
.setPayload("fileId", fileId)
.setPayload("exp", expTime)
.setPayload("iat", System.currentTimeMillis() / 1000)
.setKey(onlyOfficeJwtSecret.getBytes())
.sign();
}
return fileToken;
}
}