安装依赖#
在 ?.Domain 项目中执行:
命令执行后,会自动:
- 在项目中安装 NuGet 包
Volo.Abp.BlobStoring.FileSystem - 在
?DomainModule.cs中添加以下代码:
Setting up Blob Storaging#
在使用 Blob 存储之前,我们需要创建 Blob Container。
在 ?.Domain\BlobStoring 目录下创建一个 FileContainer 的类,内容如下:
在此之后,我们可以在 ?.Web 项目的 ?WebModule.cs 文件中的方法 ConfigureServices 下配置 AbpBlobStoringOptions:
如果在 Debug 模式下运行上传文件,那么文件将会被保存到 ?.Web\bin\Debug\net8.0\host\file-container 目录中
文件路径计算:https://docs.abp.io/en/abp/latest/Blob-Storing-File-System#file-path-calculation
Creating Application Layer#
在创建 Application Service 之前,我们需要创建一些 Application Service 使用的 DTO。
在项目 ?.Application.Contracts 中创建以下 DTO:
继续在创建 DTO 的项目中创建一个 IFileService.cs 接口:
然后,我们可以创建的 Application Service。
在项目 ?.Application 中创中建 FileAppService.cs :
我们完成了这个项目的应用层。之后,我们将为 API 创建一个 Controller,并用 Razor Page 来实现 UI。
Creating Controller#
在项目 ?.HttpApi 中创建 FileController.cs:
DownloadAsync 用于将文件从服务器发送到客户端。
此接口只需要一个 string 参数,然后我们使用该参数来获取存储的 Blob。如果 blob 存在,则返回结果 File ,以便可以开始下载过程。
Creating User Interface#
我们将只创建一个页面来证明下载和上传操作正常。
在 ?.Web 项目的 Dtos 目录中创建 UploadFileDto:
然后在 Pages 目录中创建名称为 Files 的目录。再创建一个 Razor page,该页面命名 Index 。
Index.cshtml:
我们将页面垂直划分,左侧用于上传,右侧用于下载。我们使用 ABP Tag Helpers 来创建页面。
在与 Index.cshtml 文件相同的目录下创建 Index.js 文件。
此 jQuery 代码用于下载。此外,我们还编写了一个简单的代码,以便在用户选择文件时自动填充 Filename 输入。
使用 Ajax 上传和预览图片#
如果表单中某个属性的值需要上传文件后才能得到,那么这个表单就不能用 abp 提供的 <abp-dynamic-form> tag helper,需要自己手动编写表单,可以参考 Pages/Customers 目录中的 CreateModal 或 EditModal(这个是我自己的页面,时间关系,暂时不整理出来了)。
添加通用文件上传代码:
然后在页面执行:
调用 initialAllUploadFileInputs 后会为所有的 input=file 控件绑定 change 事件,当 change 后会自动上传,并设置预览图片,但是要求 html 格式必须符合下面的顺序规范:
如果是创建表单:
如果是更新表单:
Result#
完成代码教程后,运行 ?.Web 项目,并在浏览器中打开 /Files 页面 。可以上传任何名称的任何文件,也可以下载这些上传的文件。
参考#
- https://medium.com/volosoft/file-upload-download-with-blob-storage-system-in-asp-net-core-abp-framework-eeb532a1aa23
- https://www.google.com.hk/search?q=blob+storing+with+abp+layerd+solution&oq=Blob+storing+with+abp+layerd+solution&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIKCAEQABiABBiiBDIKCAIQABiABBiiBDIKCAMQABiABBiiBDIKCAQQABiABBiiBNIBCTEzNDU3ajBqMagCALACAA&sourceid=chrome&ie=UTF-8
- https://docs.abp.io/en/abp/latest/Blob-Storing-File-System
- https://www.feidaoboke.com/post/use-abp-blob-storing-manage-file.html
- https://www.youtube.com/watch?v=zR_RmQ7q3Ek