一个用来保存参数的容器类

这个博客介绍了一个名为Args的类,它作为一个参数容器,方便地处理和获取不同数据类型的参数。Args类提供了获取字符串、整数、长整数、浮点数和布尔值的方法,并支持设置默认值。此外,Args类还支持参数列表的锁定,以确保其只读性。

import java.util.*;

/**
 * 提供一个保存参数的容器,用来给那些参数多、可选参数多、参数易变的方法提供参数读取能力。
 * 直接使用Map等类对于数据类型处理不是方便。本类提供常用数据类型的读取方法。用法示例:<br>
 * port = args.get("port",8080);<br>
 * 放入Map中的port值可以是"8443"或new Integer(8443)或其他任何类型,只要toString()
 * 能够解析出一个整数。
 * @author sunlen
 * @version 1.0
 */
public class Args
{
    /** 一个常量空参数表。用于传递空参数,该参数列表已经锁定,不能修改。*/
    public static final Args EMPTY = new Args().lock();

    /** 参数列表是否已经锁定,锁定后的参数列表将只读。*/
    boolean locked;

    /** Map保存的参数。*/
    Map args;

    /** 创建空参数列表。*/
    public Args()
    {

很好!你现在需要创建一个专门用于放**图纸文件**(如 DWG、PDF、PNG 等设计图)的容器。我们将从 **定义容器 → 配置储路径 → 编写上传/下载服务** 一步步来完成。 --- ## ✅ 第一步:创建图纸容器(Blob Container) 我们使用一个作为标记,命名为 `DrawingContainer`: ```csharp // 文件:DrawingContainer.cs namespace OnMonitor; public class DrawingContainer { } // 标记,用于标识图纸文件储 ``` > 💡 提示:这个不需要任何方法或属性,只是 ABP 用来区分不同 Blob 容器的“标签”。 --- ## ✅ 第二步:配置本地储路径 在你的模块 `OnMonitorApplicationModule` 中,添加对 `DrawingContainer` 的配置: ```csharp Configure<AbpBlobStoringOptions>(options => { // 其他容器配置……(如 FileContainer、DocumentContainer) // 👇 新增:图纸专用容器 options.Containers.Configure<DrawingContainer>(container => { container.UseFileSystem(fileSystem => { fileSystem.BasePath = Path.Combine( Directory.GetCurrentDirectory(), "wwwroot", "drawings" // 实际路径:./wwwroot/drawings/ ); }); }); }); ``` 📌 这样所有图纸文件都会保存到: ``` /wwwroot/drawings/ ``` 例如: - `drawings/factory/layout.pdf` - `drawings/workshop/drilling.dwg` - `drawings/electric/circuit.png` --- ## ✅ 第三步:创建图纸管理服务(上传 & 下载) ```csharp using Volo.Abp.BlobStoring; using System.Threading.Tasks; using System.IO; public class DrawingAppService : ApplicationService { private readonly IBlobContainer<DrawingContainer> _drawingContainer; public DrawingAppService(IBlobContainer<DrawingContainer> drawingContainer) { _drawingContainer = drawingContainer; } /// <summary> /// 上传图纸文件 /// </summary> /// <param name="fileName">原始文件名,如 "layout.pdf"</param> /// <param name="fileStream">文件流</param> /// <param name="subFolder">可选子目录,如 "factory", "workshop"</param> public async Task UploadDrawingAsync(string fileName, Stream fileStream, string subFolder = "") { var blobName = string.IsNullOrEmpty(subFolder) ? fileName : $"{subFolder.Trim('/')}/{fileName}"; await _drawingContainer.SaveAsync(blobName, fileStream); } /// <summary> /// 下载图纸文件 /// </summary> /// <param name="fileName">完整路径名,如 "factory/layout.pdf"</param> /// <returns>文件字节流,不在返回 null</returns> public async Task<byte[]> DownloadDrawingAsync(string fileName) { if (!await _drawingContainer.ExistsAsync(fileName)) { return null; } using (var stream = await _drawingContainer.GetAsync(fileName)) { return stream.ToArray(); } } /// <summary> /// 删除图纸 /// </summary> public async Task DeleteDrawingAsync(string fileName) { if (await _drawingContainer.ExistsAsync(fileName)) { await _drawingContainer.DeleteAsync(fileName); } } /// <summary> /// 检查图纸是否在 /// </summary> public async Task<bool> ExistsAsync(string fileName) { return await _drawingContainer.ExistsAsync(fileName); } } ``` --- ## ✅ 第四步:确保静态文件可访问(前端预览) 如果你希望用户能通过 URL 直接查看图纸(比如 PDF),需要启用静态文件中间件。 ### 在 `Program.cs` 添加: ```csharp app.UseStaticFiles(); // 启用 wwwroot 下的静态文件 // 可选:显式映射 drawings 目录(更清晰) app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "drawings") ), RequestPath = "/drawings" }); ``` 这样就可以通过以下 URL 访问: ``` https://localhost:5001/drawings/factory/layout.pdf ``` > ⚠️ 注意安全:如果图纸涉密,请不要开放直接访问,应通过接口代理下载并做权限验证。 --- ## ✅ 使用示例(调用服务) ```csharp public class TestService { private readonly DrawingAppService _drawingService; public TestService(DrawingAppService drawingService) { _drawingService = drawingService; } public async Task Demo() { var filePath = "C:\\temp\\layout.pdf"; using var stream = File.OpenRead(filePath); // 上传到 drawings/factory/layout.pdf await _drawingService.UploadDrawingAsync("layout.pdf", stream, "factory"); // 下载 var bytes = await _drawingService.DownloadDrawingAsync("factory/layout.pdf"); } } ``` --- ## ✅ 文件夹结构最终效果 项目运行后会自动生成目录结构: ``` wwwroot/ └── drawings/ ├── factory/ │ └── layout.pdf ├── workshop/ │ └── drilling.dwg └── electric/ └── circuit.png ``` 所有目录都会**自动创建**,无需手动干预。 --- ## ✅ 总结 你现在已经成功创建了一个专用于放图纸的容器: | 内容 | 说明 | |------|------| | 容器名称 | `DrawingContainer` | | 储路径 | `wwwroot/drawings` | | 支持格式 | 所有图纸型(PDF/DWG/PNG 等) | | 是否自动建目录 | 是 | | 是否支持子文件夹 | 是(通过 `subFolder` 参数) | | 是否推荐 | ✅ 强烈推荐用于业务隔离 | ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值