【发布时间】:2021-07-21 20:05:11
【问题描述】:
我正在 Asp.Core 中构建一个 API,其中会发出不同的请求。其中之一是如果需要,用户应该能够向请求添加一个或多个文件。创建数据库表如下:
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; }
}
我坚持的是如何继续,以便能够将文件名和二进制文件数据存储在数据库中。 (我正在使用邮递员发布数据)。我愿意接受有关如何进行的想法,如果有人有的话。
【问题讨论】:
-
旁注:
QueryFirstAsync/QuerySingleAsync可能对你有用——你可能不需要DynamicParameters -
我包含了一个使用 byte[] 的参数,谢谢。现在,下一个问题是邮递员不喜欢同时发送文件上传的表单数据和 API 其余部分的原始 json ......有人知道如何混合这两个吗?
标签: c# sql api asp.net-core dapper