当前位置: 首页 > news >正文

手机搭建网站教程视频教程wordpress图片懒加载js

手机搭建网站教程视频教程,wordpress图片懒加载js,手机购物网站建设,美团做团购网站点击上方蓝字小黑在哪里关注我吧创建模块模块开发应用服务运行模块单元测试模块使用前言在之前的章节中介绍过ABP扩展实体#xff0c;当时在用户表扩展了用户头像字段#xff0c;用户头像就涉及到文件上传和文件存储。文件上传是很多系统都会涉及到的一个基础功能… 点击上方蓝字小黑在哪里关注我吧创建模块模块开发应用服务运行模块单元测试模块使用前言在之前的章节中介绍过ABP扩展实体当时在用户表扩展了用户头像字段用户头像就涉及到文件上传和文件存储。文件上传是很多系统都会涉及到的一个基础功能在ABP的模块化思路下文件管理可以做成一个通用的模块便于以后在多个项目中复用。单纯实现一个文件上传的功能并不复杂本文就借着这个简单的功能来介绍一下ABP模块化开发的最基本步骤。开始创建模块首先使用ABP CLI创建一个模块abp new Xhznl.FileManagement -t module --no-ui创建完成后会得到如下文件在主项目中添加对应模块的引用ApplicationApplicationDomainDomainHttpApiHttpApi 等等。例如需要添加引用的项目Application、Application.Contracts、Domain、Domain.Shared、EntityFrameworkCore、HttpApi、HttpApi.Client手动添加这些引用比较麻烦你可以搭建自己的私有NuGet服务器把模块的包发布到私有NuGet上然后通过NuGet来安装引用。两种方式各有优缺点具体请参考自定义现有模块[1]关于私有NuGet搭建可以参考十分钟搭建自己的私有NuGet服务器-BaGet[2]。然后给这些项目的模块类添加对应的依赖例如通过上面的方式引用模块使用visual studio是无法编译通过的需要在解决方案目录下手动执行dotnet restore命令即可模块开发接下来关于文件管理功能的开发都在模块Xhznl.FileManagement中进行它是一个独立的解决方案。初学ABP下面就以尽量简单的方式来实现这个模块。应用服务模块开发通常从Domain层实体建立开始但是这里先跳过。先在FileManagement.Application.Contracts项目添加应用服务接口和Dto。modules\file-management\src\Xhznl.FileManagement.Application.Contracts\Files\IFileAppService.cspublic interface IFileAppService : IApplicationService {Taskbyte[] GetAsync(string name);Taskstring CreateAsync(FileUploadInputDto input); } modules\file-management\src\Xhznl.FileManagement.Application.Contracts\Files\FileUploadInputDto.cspublic class FileUploadInputDto {[Required]public byte[] Bytes { get; set; }[Required]public string Name { get; set; } } 然后是FileManagement.Application项目实现应用服务先定义一个配置类。modules\file-management\src\Xhznl.FileManagement.Application\Files\FileOptions.cspublic class FileOptions {/// summary/// 文件上传目录/// /summarypublic string FileUploadLocalFolder { get; set; }/// summary/// 允许的文件最大大小/// /summarypublic long MaxFileSize { get; set; }  1048576;//1MB/// summary/// 允许的文件类型/// /summarypublic string[] AllowedUploadFormats { get; set; }  { .jpg, .jpeg, .png, gif, .txt }; } modules\file-management\src\Xhznl.FileManagement.Application\Files\FileAppService.cspublic class FileAppService : FileManagementAppService, IFileAppService {private readonly FileOptions _fileOptions;public FileAppService(IOptionsFileOptions fileOptions){_fileOptions  fileOptions.Value;}public Taskbyte[] GetAsync(string name){Check.NotNullOrWhiteSpace(name, nameof(name));var filePath  Path.Combine(_fileOptions.FileUploadLocalFolder, name);if (File.Exists(filePath)){return Task.FromResult(File.ReadAllBytes(filePath));}return Task.FromResult(new byte[0]);}[Authorize]public Taskstring CreateAsync(FileUploadInputDto input){if (input.Bytes.IsNullOrEmpty()){throw new AbpValidationException(Bytes can not be null or empty!,new ListValidationResult{new ValidationResult(Bytes can not be null or empty!, new[] {Bytes})});}if (input.Bytes.Length  _fileOptions.MaxFileSize){throw new UserFriendlyException($File exceeds the maximum upload size ({_fileOptions.MaxFileSize / 1024 / 1024} MB)!);}if (!_fileOptions.AllowedUploadFormats.Contains(Path.GetExtension(input.Name))){throw new UserFriendlyException(Not a valid file format!);}var fileName  Guid.NewGuid().ToString(N)  Path.GetExtension(input.Name);var filePath  Path.Combine(_fileOptions.FileUploadLocalFolder, fileName);if (!Directory.Exists(_fileOptions.FileUploadLocalFolder)){Directory.CreateDirectory(_fileOptions.FileUploadLocalFolder);}File.WriteAllBytes(filePath, input.Bytes);return Task.FromResult(/api/file-management/files/  fileName);} } 服务实现很简单就是基于本地文件系统的读写操作。下面是FileManagement.HttpApi项目添加控制器暴露服务API接口。modules\file-management\src\Xhznl.FileManagement.HttpApi\Files\FileController.cs[RemoteService] [Route(api/file-management/files)] public class FileController : FileManagementController {private readonly IFileAppService _fileAppService;public FileController(IFileAppService fileAppService){_fileAppService  fileAppService;}[HttpGet][Route({name})]public async TaskFileResult GetAsync(string name){var bytes  await _fileAppService.GetAsync(name);return File(bytes, MimeTypes.GetByExtension(Path.GetExtension(name)));}[HttpPost][Route(upload)][Authorize]public async TaskJsonResult CreateAsync(IFormFile file){if (file  null){throw new UserFriendlyException(No file found!);}var bytes  await file.GetAllBytesAsync();var result  await _fileAppService.CreateAsync(new FileUploadInputDto(){Bytes  bytes,Name  file.FileName});return Json(result);}} 运行模块ABP的模板是可以独立运行的在FileManagement.HttpApi.Host项目的模块类FileManagementHttpApiHostModule配置FileOptions修改FileManagement.HttpApi.Host和FileManagement.IdentityServer项目的数据库连接配置然后启动这2个项目不出意外的话可以看到如下界面。FileManagement.HttpApi.HostFileManagement.IdentityServer现在你可以使用postman来测试一下File的2个API当然也可以编写单元测试。单元测试更好的方法是编写单元测试关于如何做好单元测试可以参考ABP源码下面只做一个简单示例模块使用模块测试通过后回到主项目。模块引用模块依赖前面都已经做好了现在只需配置一下FileOptions就可以使用了。目前FileManagement.Domain、FileManagement.Domain.Shared、FileManagement.EntityFrameworkCore这几个项目暂时没用到项目结构也不是固定的可以根据自己实际情况来调整。最后本文的模块示例比较简单只是完成了一个文件上传和显示的基本功能关于实体数据库领域服务仓储之类的都暂时没用到。但是相信可以通过这个简单的例子感受到ABP插件式的开发体验这是一个好的开始更多详细内容后面再做介绍。本文参考了ABP blogging模块的文件管理关于文件存储ABP中也有一个BLOB系统可以了解一下。参考资料[1]自定义现有模块: https://docs.abp.io/zh-Hans/abp/latest/Customizing-Application-Modules-Guide[2]十分钟搭建自己的私有NuGet服务器-BaGet: https://www.cnblogs.com/xhznl/p/13426918.html如果本文对您有用不妨点个“在看”或者转发朋友圈支持一下
http://www.zqtcl.cn/news/388146/

相关文章:

  • 网站架构需求wordpress过去指定分类文章
  • 房管局备案查询网站功能型网站开发
  • 聊城手机网站建设服务自己开网站做职称论文可以吗
  • 企业网站禁忌手机端网站开发页
  • 深圳外贸商城网站建设wordpress 空搜索
  • 做微信的网站有哪些shop商城系统
  • 网站落地页如何做优化大师免费下载安装
  • 本地计算机做网站服务器做算命网站
  • 广州网站建设公司万齐网络科技做围棋题网站
  • 运动服装商城网站建设引流推广
  • 武进区城乡建设局网站聊城商城网站建设
  • 做网站开发赚钱吗网站建设电子书资料
  • wordpress 回收站在哪个文件夹建站之星模板好吗
  • 怎么用dw做博客网站天使投资平台官网
  • 淮安市网站建设crm网站
  • 门户网站主要特点和功能深圳地铁优化
  • 银川网站推广方式湖南建工交通建设有限公司网站
  • 知道网站域名怎么联系怎么创建自己的公司网站
  • 淘宝网站开发多少金额网站优化 福州
  • 百度推广让我先做虚拟网站后进一步优化落实
  • 好的网站建设启示汕头网页设计网站方案
  • 深圳网站制作开发免费精准客户软件
  • 网站超链接用什么南宁行业平台开发公司
  • 注册门户网站襄樊seo快速排名
  • 优秀的手机网站iis 设置此网站的访问权限
  • 用nat123做自己的网站深圳市建设工程质量检测中心官网
  • 网上做衣服的网站废旧网站哪个做的最好
  • 网站开发设置网页端口wordpress 知识库
  • 网站建设的方法有四种开发一款新闻app需要多少钱
  • 成都网站建站公司2023年防疫新政策