File到IFile的转换(代码)

本文介绍了如何通过一个File对象获得Eclipse工作空间中对应的IFile实例,这涉及到使用ResourcesPlugin来查找具体的位置URI。
  将IFile转换成File,不是难事,相信大家都能做到,但反过来如何由一个File得到workspace中对应的IFile,可能有很多人不太清楚其过程。其实也只是一句话而已,代码如下:
  1.       IContainer[] findContainersForLocationURI = ResourcesPlugin.getWorkspace().getRoot().findContainersForLocationURI(
  2.                 file.toURI());
  3.         IFile[] findFilesForLocationURI = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocationURI(filefile.toURI());
   因为URI地址的指向不确定是什么,所以返回的结果可能是IFile,或者是IContainer(IFolder,IProject).
       
这是我的完整代码 [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
09-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值