修复: Owl取流JSON反序列化(JsonOpts+PascalCase属性)+前端字段兼容+规则引擎SqlSugar语法

This commit is contained in:
2026-06-08 10:50:14 +08:00
parent 8a6776eac9
commit 1fb746c548
17 changed files with 701 additions and 266 deletions
@@ -0,0 +1,47 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
namespace VolPro.WebApi.Controllers.Warehouse;
/// <summary>
/// 文件服务。对外暴露 VolPro 文件系统中的静态文件(截图、导出等)。
/// 不走 VolPro JWT 认证体系——网关 B 组接口直接调用。
/// </summary>
[ApiController]
[AllowAnonymous]
public class FileServiceController : Controller
{
/// <summary>
/// 获取截图文件。
/// 文件存放于 VolPro.WebApi/Download/Screenshots/ 目录。
/// </summary>
/// <param name="filename">文件名(含扩展名,如 abc.png</param>
[HttpGet("api/gateway/screenshots/{filename}")]
public IActionResult GetScreenshot(string filename)
{
// 安全检查:禁止路径穿越(.., /, \)
if (string.IsNullOrWhiteSpace(filename) ||
filename.Contains("..") ||
filename.Contains('/') ||
filename.Contains('\\'))
return BadRequest(new { error = "非法文件名" });
var folder = Path.Combine(AppContext.BaseDirectory, "Download", "Screenshots");
var filePath = Path.Combine(folder, filename);
if (!System.IO.File.Exists(filePath))
return NotFound(new { error = "文件不存在" });
var ext = Path.GetExtension(filename).ToLowerInvariant();
var contentType = ext switch
{
".png" => "image/png",
".jpg" or ".jpeg" => "image/jpeg",
".gif" => "image/gif",
_ => "application/octet-stream"
};
return PhysicalFile(filePath, contentType);
}
}