myesn

myEsn2E9

hi
github

ABP: 使用 BLOB Storing (File System Provider)完成文件上传和下载

安装依赖#

?.Domain 项目中执行:

命令执行后,会自动:

  1. 在项目中安装 NuGet 包 Volo.Abp.BlobStoring.FileSystem
  2. ?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 目录中的 CreateModalEditModal(这个是我自己的页面,时间关系,暂时不整理出来了)。

添加通用文件上传代码:

然后在页面执行:

调用 initialAllUploadFileInputs 后会为所有的 input=file 控件绑定 change 事件,当 change 后会自动上传,并设置预览图片,但是要求 html 格式必须符合下面的顺序规范:

如果是创建表单:

如果是更新表单:

Result#

完成代码教程后,运行 ?.Web 项目,并在浏览器中打开 /Files 页面 。可以上传任何名称的任何文件,也可以下载这些上传的文件。

image

参考#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。