这是我的完整代码 [Route("previewFileCallback/v1/3rd/file/info"), HttpGet]
[AllowAnonymous]
public async Task<IActionResult> previewFileCallback([FromQuery] string _w_third_fielversion)
{
// 从请求头中获取 X-Weboffice-File-Id 的值
if (!HttpContext.Request.Headers.ContainsKey("X-Weboffice-File-Id") ||
string.IsNullOrEmpty(HttpContext.Request.Headers["X-Weboffice-File-Id"]))
{
return BadRequest(new { message = "请求头中缺少 X-Weboffice-File-Id" });
}
string code = HttpContext.Request.Headers["X-Weboffice-File-Id"];
var query = await _sys_File_InfoRepository.FindAsIQueryable(x => x.file_code == code && x.dr == 0 && x.file_version == _w_third_fielversion)
.OrderByDescending(x => x.yundoc_file_version) // 按 yundoc_file_version 降序排序
.Select(s => new
{
id = s.file_code,
fileSuffix = s.file_suffix,
version = s.yundoc_file_version,
size = s.file_size,
s.creator,
create_time = s.create_date,
s.modifier,
modify_time = s.modify_date,
fileName = s.file_name,
s.uuid,
s.is_encode_file,
s.file_path,
urlParam = "/" + s.uuid + "/" + s.file_suffix + "/" + s.is_encode_file,
preview_pages = 0
}).FirstOrDefaultAsync();
if (query == null)
{
var filepdf = await _sys_File_PdfRepository.FindAsIQueryable(x => x.uuid == code && x.dr == 0).FirstOrDefaultAsync();
if (filepdf != null) {
var SysFileInfo = await _sys_File_InfoRepository.FindAsIQueryable(x => x.uuid == filepdf.original_uuid).FirstOrDefaultAsync();
if (SysFileInfo.fileSource.Equals("DAM", StringComparison.OrdinalIgnoreCase))
{
// 创建可复用的HttpClient
var httpClientDown = _httpClientFactory.CreateClient();
httpClientDown.BaseAddress = new Uri("http://10.17.4.191:8080/");
string PdfUuid = string.IsNullOrEmpty(filepdf.file_path) ? filepdf.file_path : filepdf.uuid;
string isEncodeFile = string.IsNullOrEmpty(filepdf.is_encode_file) ? "否" : filepdf.is_encode_file;
string filename = filepdf.file_name + ".pdf";
string download_url = download_base_url + "fileName=" + HttpUtility.UrlEncode(filename) + "&uuid=" + HttpUtility.UrlEncode(PdfUuid) + "&type=pdf&isEncodeFile=" + HttpUtility.UrlEncode(isEncodeFile);
long fileSize = 0;
// 调用GET方法下载文件
var downloadResponse = await httpClientDown.GetAsync(download_url);
downloadResponse.EnsureSuccessStatusCode();
// 获取文件流
using var fileStream = await downloadResponse.Content.ReadAsStreamAsync();
// 验证流是否可读取
if (!fileStream.CanRead)
{
throw new Exception("获取的文件流不可读");
}
if (downloadResponse.Content.Headers.ContentDisposition != null)
{
var contentDisposition = downloadResponse.Content.Headers.ContentDisposition;
if (contentDisposition.FileNameStar != null)
{
string fileName = contentDisposition.FileNameStar; // 带编码的文件名
Console.WriteLine($"文件名 (UTF8 编码): {fileName}");
}
else if (contentDisposition.FileName != null)
{
string fileName = contentDisposition.FileName.Trim('"'); // 去掉引号
Console.WriteLine($"文件名: {fileName}");
}
if (downloadResponse.Content.Headers.ContentLength.HasValue)
{
fileSize = downloadResponse.Content.Headers.ContentLength.Value;
Console.WriteLine($"文件大小: {fileSize} 字节");
}
}
}
else
{
// 查询不到时去PDF表查,注意上面查询的字段都是必填项
query = await _sys_File_PdfRepository.FindAsIQueryable(x => x.uuid == code && x.dr == 0)
.Select(s => new
{
id = s.uuid,
fileSuffix = s.file_suffix,
version = 1,
size = s.file_size,
s.creator,
create_time = s.create_date,
s.modifier,
modify_time = s.modify_date,
fileName = s.file_name,
s.uuid,
s.is_encode_file,
s.file_path,
urlParam = "/" + s.uuid + "/" + s.file_suffix + "/" + s.is_encode_file,
preview_pages = 0
}).FirstOrDefaultAsync();
}
}
}
if (query == null)
{
// 查询不到时去采更单表查,注意上面查询的字段都是必填项
query = await _File_PurchaseOrderRepository.FindAsIQueryable(x => x.uuid == code && x.dr == 0)
.Select(s => new
{
id = s.uuid,
fileSuffix = s.file_suffix,
version = 1,
size = s.file_size,
s.creator,
create_time = s.create_date,
s.modifier,
modify_time = s.modify_date,
fileName = s.file_name,
s.uuid,
is_encode_file = "否",
file_path = "",
urlParam = "/" + s.uuid + "/" + s.file_suffix + "/否",
preview_pages = 0
}).FirstOrDefaultAsync();
}
if (query == null)
{
// 查询不到时去旧文件表查,注意上面查询的字段都是必填项
query = await _OldRepository.FindAsIQueryable(x => x.file_code == code && x.dr == 0 && x.file_version == _w_third_fielversion)
.OrderByDescending(x => x.yundoc_file_version) // 按 yundoc_file_version 降序排序
.Select(s => new
{
id = s.file_code,
fileSuffix = s.file_suffix,
version = s.yundoc_file_version,
size = s.file_size,
s.creator,
create_time = s.create_date,
s.modifier,
modify_time = s.modify_date,
fileName = s.file_name,
s.uuid,
s.is_encode_file,
s.file_path,
urlParam = "/" + s.uuid + "/" + s.file_suffix + "/" + s.is_encode_file,
preview_pages = 0
}).FirstOrDefaultAsync();
}
if (query == null)
{
// 查询不到时去废止表查,注意上面查询的字段都是必填项
query = await _AbandonRepository.FindAsIQueryable(x => x.file_code == code && x.dr == 0 && x.file_version == _w_third_fielversion)
.OrderByDescending(x => x.yundoc_file_version) // 按 yundoc_file_version 降序排序
.Select(s => new
{
id = s.file_code,
fileSuffix = s.file_suffix,
version = s.yundoc_file_version,
size = s.file_size,
s.creator,
create_time = s.create_date,
s.modifier,
modify_time = s.modify_date,
fileName = s.file_name,
s.uuid,
s.is_encode_file,
s.file_path,
urlParam = "/" + s.uuid + "/" + s.file_suffix + "/" + s.is_encode_file,
preview_pages = 0
}).FirstOrDefaultAsync();
}
if (query == null)
{
// sys_file_info和pdf表都找不到时,取review_report表查
query = await _review_ReportRepository.FindAsIQueryable(x => x.Uuid == code)
.Select(s => new
{
id = s.Uuid,
fileSuffix = s.ReportSuffix,
version = 1,
size = s.FileSize,
creator = s.CreateId,
create_time = s.CreateDate,
modifier = s.Modifier,
modify_time = s.ModifyDate,
fileName = s.ReportName,
uuid = s.Uuid,
is_encode_file = "否",
file_path = "",
urlParam = "/" + s.Uuid + "/" + s.ReportSuffix + "/否",
preview_pages = 0
}).FirstOrDefaultAsync();
}
if (query == null)
{
// 去 File_Approval_Form 表查
query = await _IFile_Approval_FormRepository.FindAsIQueryable(x => x.Uuid == code)
.Select(s => new
{
id = s.Uuid,
fileSuffix = s.FileSuffix,
version = 1,
size = s.FileSize,
creator = s.CreateId,
create_time = s.CreateDate,
modifier = s.Modifier,
modify_time = s.ModifyDate,
fileName = s.FormName,
uuid = s.Uuid,
is_encode_file = "否",
file_path = "",
urlParam = "/" + s.Uuid + "/" + s.FileSuffix + "/否",
preview_pages = 0
}).FirstOrDefaultAsync();
}
if (query == null)
{
// 去 File_History_Record 表查
query = await _IFile_History_RecordRepository.FindAsIQueryable(x => x.Uuid == code)
.Select(s => new
{
id = s.Uuid,
fileSuffix = s.FileSuffix,
version = 1,
size = s.FileSize,
creator = s.CreateId,
create_time = s.CreateDate,
modifier = s.Modifier,
modify_time = s.ModifyDate,
fileName = s.HistoryName,
uuid = s.Uuid,
is_encode_file = "否",
file_path = "",
urlParam = "/" + s.Uuid + "/" + s.FileSuffix + "/否",
preview_pages = 0
}).FirstOrDefaultAsync();
}
if (query != null)
{
var fileUuid = string.IsNullOrEmpty(query.file_path) ? query.uuid : query.file_path;
var isEncodeFile = string.IsNullOrEmpty(query.is_encode_file) ? "否" : query.is_encode_file;
var downloadUrlTemp = download_base_url + "fileName=" + HttpUtility.UrlEncode(query.fileName) + "&uuid=" + HttpUtility.UrlEncode(fileUuid) + "&type=" + query.fileSuffix + "&isEncodeFile=" + HttpUtility.UrlEncode(isEncodeFile);
var options = new
{
query.id,
name = HttpUtility.UrlEncode(query.fileName) + "." + query.fileSuffix,
query.version,
query.size,
query.creator,
create_time = ConvertToTimestamp((DateTime)query.create_time, TimestampUnit.Seconds), // 转换时间戳
query.modifier,
modify_time = ConvertToTimestamp((DateTime)query.modify_time, TimestampUnit.Seconds), // 转换时间戳
download_url = downloadUrlTemp,
query.preview_pages
};
//TODO 根据登录人信息查询对应权限
var user = new
{
id = "id1000", //用户id
name = "wps-1000", // 用户名称
permission = "write" // 用户操作权限
};
Logger.Info(Core.Enums.LoggerType.Preview, null, "callback success");
return Ok(new { file = options, user });
}
else
{
Logger.Info(Core.Enums.LoggerType.Preview, null, "未找到对应的文件信息");
return NotFound(new { message = "未找到对应的文件信息" });
}
},我现在想在 if (downloadResponse.Content.Headers.ContentLength.HasValue)
{
fileSize = downloadResponse.Content.Headers.ContentLength.Value;
Console.WriteLine($"文件大小: {fileSize} 字节");
}后面将值赋给query,也就是filepdf的一些值和查出来的fileSize一起像
// 查询不到时去PDF表查,注意上面查询的字段都是必填项
query = await _sys_File_PdfRepository.FindAsIQueryable(x => x.uuid == code && x.dr == 0)
.Select(s => new
{
id = s.uuid,
fileSuffix = s.file_suffix,
version = 1,
size = s.file_size,
s.creator,
create_time = s.create_date,
s.modifier,
modify_time = s.modify_date,
fileName = s.file_name,
s.uuid,
s.is_encode_file,
s.file_path,
urlParam = "/" + s.uuid + "/" + s.file_suffix + "/" + s.is_encode_file,
preview_pages = 0
}).FirstOrDefaultAsync();这样给query