这一篇文章,我们实现文件的简单上传功能。
   首先,我们就像创建一个普通接口一样,在Application层创建一个目录,目录下定义一个接口IFileCommonService,这个IFileCommonService继承自IApplicationService,并在接口中定义了文件上传的方法,方法的返回值是文件上传成功后,文件的信息,会在文章的最后贴出。

    /// <summary>/// 文件通用的接口 定义/// </summary>public interface IFileCommonService : IApplicationService{/// <summary>/// 上传一个文件,并返回文件上传成功后的信息/// </summary>/// <param name="File">要上传的文件实体</param>/// <returns>文件上传成功后返回的文件相关信息</returns>Task<FileUploadOutputDto> UploadFile( IFormFile File);}

然后,我们定义一个类FileCommonService,继承自基类ApplicationService,并实现上面我们定义的IFileCommonService。方法实现的整体思路就是首先获取文件的基本信息(文件名,大小,类型),然后通过读取配置文件,生成文件的保存路径,通过Guid生成新的文件名,保存到保存路径下,然后将文件的信息返回给前端,其中文件的FileUrl就是文件下载的路径。

    /// <summary>/// 文件通用的接口 实现/// </summary>public class FileCommonService : ApplicationService, IFileCommonService{/// <summary>/// 上传一个文件,并返回文件上传成功后的信息/// </summary>/// <param name="File">要上传的文件实体</param>/// <returns>文件上传成功后返回的文件相关信息</returns>public async Task<FileUploadOutputDto> UploadFile( IFormFile File){try{//文件的原始名称string FileOriginName = File.FileName;//读取文件保存的根目录string fileSaveRootDir = ConfigHelper.GetAppSetting("App", "FileRootPath");//读取办公管理文件保存的模块的根目录string fileSaveDir = ConfigHelper.GetAppSetting("App", "OAFiles");//文件保存的相对文件夹(保存到wwwroot目录下)string absoluteFileDir = fileSaveRootDir + "/" + fileSaveDir;//文件保存的路径(应用的工作目录+文件夹相对路径);string fileSavePath = Environment.CurrentDirectory + "/wwwroot/" + absoluteFileDir;if (!Directory.Exists(fileSavePath)){Directory.CreateDirectory(fileSavePath);}//生成文件的名称string Extension = Path.GetExtension(FileOriginName);//获取文件的源后缀if (string.IsNullOrEmpty(Extension)){throw new UserFriendlyException("文件上传的原始名称好像不对哦,没有找到文件后缀");}string fileName = Guid.NewGuid().ToString() + Extension;//通过uuid和原始后缀生成新的文件名//最终生成的文件的相对路径(xxx/xxx/xx.xx)string finalyFilePath = fileSavePath + "/" + fileName;FileUploadOutputDto result = new FileUploadOutputDto();//打开上传文件的输入流Stream stream = File.OpenReadStream();//创建输入流的reader//var fileType = stream.GetFileType();//文件大小result.FileLength = stream.Length;result.FileName = FileOriginName;result.FileType = Extension.Substring(1);result.FileUrl = absoluteFileDir + "/" + fileName;//开始保存拷贝文件FileStream targetFileStream = new FileStream(finalyFilePath, FileMode.OpenOrCreate);await stream.CopyToAsync(targetFileStream);return result;}catch (Exception ex){throw new UserFriendlyException("文件上传失败,原因" + ex.Message);}}}

相关的类如下,文件返回信息类:

    /// <summary>/// 文件上传成功后的实体/// </summary>public class FileUploadOutputDto{/// <summary>/// 文件名称:文件上传的原始名称/// </summary>public string FileName { get; set; }/// <summary>/// 配置的文件保存路径+guid生成的文件名+文件的原始后缀/// </summary>public string FileUrl { get; set; }/// <summary>/// 文件的大小/// </summary>public long FileLength { get; set; }/// <summary>/// 文件的类型/// </summary>public string FileType { get; set; }}

获取配置文件的Helper类:

public static class ConfigHelper{private static IConfigurationRoot _appConfiguration = AppConfigurations.Get(System.Environment.CurrentDirectory);//用法1(有嵌套):GetAppSetting("Authentication", "JwtBearer:SecurityKey")//用法2:GetAppSetting("App", "ServerRootAddress")public static string GetAppSetting(string section, string key){return _appConfiguration.GetSection(section)[key];}public static string GetConnectionString(string key){return _appConfiguration.GetConnectionString(key);}}

最后的最后,不要忘了在 项目名.Web.Host的appsettings.json中添加你的配置哦。

{"ConnectionStrings": {"Default": "Server=localhost; Database=YiGongDb; uid=root;pwd=123456;;","YiGongOA": "Server=localhost; Database=YiGongOADb; uid=root;pwd=123456;"},"App": {"ServerRootAddress": "http://localhost:21021/","ClientRootAddress": "http://localhost:4200/","FileRootPath": "UploadFile","OAFiles": "OAFiles","CorsOrigins": "http://localhost:4200,http://localhost:8080,http://localhost:8081,http://localhost:3000"},"Authentication": {"JwtBearer": {"IsEnabled": "true","SecurityKey": "YiGong_C421AAEE0D114E9C","Issuer": "YiGong","Audience": "YiGong"}}
}

在Swagger中调试如下

Abp框架从零开始(基于.Net Core 2.2) 小记(二) 简单的文件上传相关推荐

  1. Abp框架从零开始(基于.Net Core 2.2) 小记(五) 将服务器部署在IIS上

    这一篇,我们尝试将我们的Abp项目部署到IIS上. 首先回顾下Abp框架从零开始(基于.Net Core 2.2) 小记(一) 为Swagger接口页添加详细注释这篇文章,为我们的接口添加上详细的注释 ...

  2. Abp框架从零开始(基于.Net Core 2.2) 小记(四) Abp中使用Redis

    ABP中的默认缓存功能是基于MemroyCache来实现的.MemroyCache对于复杂的结构和操作.数据同步和持久化来说,是不适用的,所以我们将在系统中集成使用Redis缓存,redis的安装就不 ...

  3. Abp框架从零开始(基于.Net Core 2.2) 小记(三) 将EF生成调用的Sql语句打印到控制台

    前一段时间,忙完了终身大事,导致自我学习的步伐给停了,这段时间赶紧快马加鞭,继续学习研究下Abp框架,这次我们把仓储层生成调用的Sql语句打印出来,方便以后程序的调试和调优. 在仓储层(EntityF ...

  4. Abp框架从零开始(基于.Net Core 2.2) 小记(一) 为Swagger接口页添加详细注释

    Swagger接口页添加接口注释和参数注释 从Abp官网创建完项目之后,启动之后,Swagger的接口说明页,默认是没有接口说明的,这样是很不友好的,也不利于接口调用者的使用,所以,我们要实现Swag ...

  5. 基于OkHttp 、Retrofit 、Volley 、RxJava、Novate多种网络框架整合的快速项目开发框架,一行代码实现Ftp文件上传、文件下载、文件删除和进度监听的工具类的使用

    基于OkHttp .Retrofit .Volley .RxJava.Novate多种网络框架整合的快速项目开发框架,Ftp文件上传.文件下载的工具类的使用. 依赖于Ftp的jar包,对上传.下载.删 ...

  6. 关于SpringMVC框架实现简单的文件上传下载(ssm)

    关于ssm框架整合文件的上传和下载. 首先来看单个附件的上传和下载: 1.首先创建一个用来测试的jsp文件上传下载的页面  代码如下 <%@ page language="java&q ...

  7. 如何基于OSS和MPS,快速搭建音视频文件上传服务?

    背景 本文主要介绍如何基于OSS服务和MPS的上传SDK,快速搭建一个音视频文件上传服务. 优势 使用MPS的上传SDK上传音视频文件,具有以下优势: 增加文件列表管理功能. 增加STS Token ...

  8. 如何基于OSS和MTS,快速搭建音视频文件上传服务?

    摘要: 背景 本文主要介绍如何基于OSS服务和MTS的上传SDK,快速搭建一个音视频文件上传服务. 优势 使用MTS的上传SDK上传音视频文件,具有以下优势: 增加文件列表管理功能. 增加STS To ...

  9. 三层架构中ajax,基于mvc三层架构和ajax技术实现最简单的文件上传

    前台页面提交文件 文件操作 上传文件 //上传文件 function upFile() { var file = document.getElementById("UpFile") ...

最新文章

  1. 深度学习以及卷积基础
  2. git仓库删除文件夹/文件
  3. 什么是 Rxjs 的 subscription
  4. (十三)linux中断底半部分处理机制
  5. 第二章 面向对象的编程风格
  6. 装饰器python的通俗理解_2道极好的Python算法题 | 带你透彻理解装饰器的妙用
  7. python的框架django_Python框架Django高级内容,python
  8. about page
  9. CSDN积分获取方法
  10. 【Unity】关于ScreenCapture.CaptureScreenshot截屏的尝试
  11. Python pandas 根据指定条件筛选数据
  12. P1714 切蛋糕(线段树+前缀和)
  13. Computational Optimal Transport 笔记——第二章(2)
  14. 畅写Office加持公软件云协作特性,让企业办公效率飞起来
  15. 网络基础服务器 与SMP、NUMA、MPP 三大体系结构科普
  16. js 根据id 取出数组中对应的对象
  17. 日记侠:你的朋友圈能引流,你还不知道?
  18. 测试工具AppScan安装使用
  19. 清理linux日志的命令
  20. MySQL中的CRUD操作( Create, Retrieve,Update,Delete)

热门文章

  1. Unity基础-物理系统
  2. shell编程之打印菱形图案
  3. 到底什么是深度学习?
  4. 《液晶显示器和液晶电视维修核心教程》——2.6 三端稳压器
  5. MySQL JSON 函数
  6. 峰哥教你如何在阿里云社区进阶大数据
  7. 网络层—IP地址的三种分类方式
  8. n918st能刷Android5吗?,中兴N918st (V5S 双4G)一键刷机教程图解,怎么刷机简单
  9. iPod和其他MP3音频图书
  10. VSCode远程连接服务器报错:Could not establish connection to “xxxxxx”【已解决】