ASP.Core上传文件:如何将二进制文件存入数据库table,使用Dapper插入数据

Upload files in ASP.Core: How to store the binary file in the database table, using Dapper to insert data

我正在 Asp.Core 中构建一个 API,其中提出了不同的请求。其中之一是,如果需要,用户应该能够向请求添加一个或多个文件。数据库 table 创建如下:

CREATE TABLE OptionalFile (
    FileID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
    FileName NVARCHAR(100) NOT NULL,
    FileBloB VARBINARY(MAX) NOT NULL,
    CreatedDate DATETIME DEFAULT getdate() NOT NULL,
    CreatedBy NVARCHAR(20) DEFAULT suser_sname() NOT NULL,
    UpdatedDate DATETIME DEFAULT getdate() NOT NULL,
    UpdatedBy NVARCHAR(20) DEFAULT suser_sname() NOT NULL
    );

//cross table 
CREATE TABLE ClaimCrossOptionalFile(
        ClaimID int FOREIGN KEY REFERENCES Claim(ID) NOT NULL,
        FileID int FOREIGN KEY REFERENCES OptionalFile(FileID) NOT NULL,
        CreatedDate DATETIME DEFAULT getdate() NOT NULL,
        CreatedBy NVARCHAR(20) DEFAULT suser_sname() NOT NULL,
        UpdatedDate DATETIME DEFAULT getdate() NOT NULL,
        UpdatedBy NVARCHAR(20) DEFAULT suser_sname() NOT NULL
    );

现在,我只想在 API 中有一个名为“文件”或类似内容的字段来上传文件,并且数据库将接受文件名和文件的二进制数据。对于 API 的其余部分,我使用 Dapper 将数据插入数据库。我目前有以下代码用于插入文件名:

if (item.fileuploadresults != null) {

  try {

    foreach(FileUploadResult f in item.fileuploadresults) {
      var parameters = new DynamicParameters();
      parameters.Add("filename", f.filename);

      var filemessage = await _sqlconnection.QueryAsync < int > ($ @ "INSERT INTO 
      [dbo].[OptionalFile] ([FileName])
        VALUES(@filename); SELECT SCOPE_IDENTITY();
        ", parameters);

        int FileMessageID = filemessage.First();

        //update crosstable
        await _sqlconnection.QueryAsync < int > ($ @ "INSERT INTO[dbo].
        [ClaimCrossOptionalFile]
          (ClaimID, FileID) VALUES({
            claimID
          }, {
            FileMessageID
          });
          ");

        }

      }

      catch (Exception ex) {
        int k = 0;
      }

    }

模型如下所示:

public class FileUploadResult
    {
        public IFormFile files { get; set; } 

        [MaxLength]
        public byte[] FileBlob { get; set; }

        public long Length { get; set; }

        public string filename { get; set; }
    }


 public class Service
    {
        public IList<FileUploadResult> fileuploadresults { get; set; } 
    }

我坚持的是如何继续,以便能够在数据库中存储文件名和二进制文件数据。 (我正在使用 postman 来 post 数据)。如果有人有想法,我愿意接受如何进行的想法。

您可以通过 dapper 存储 blob,只需包含类型为 byte[] 的参数(并将其包含在 insert 中)。如果问题是文件特别大(使大的 byte[] 不合适),那么您可能需要循环并附加带有 +like this

的块