You need to enable JavaScript to run this app. ASP Web API方法添加文件上传功能并直接存库的实现方案咨询
优惠活动
大模型
产品
解决方案
定价
更多

ASP Web API方法添加文件上传功能并直接存库的实现方案咨询

最优整合方案说明

核心思路是直接移除本地文件存储逻辑,将上传拿到的IFormFile对象信息直接对接已有数据库写入逻辑即可,无需修改现有表结构,同时修正原有代码的SQL注入风险,具体实现如下:


整合后完整代码示例

// 入参说明:claimID为当前业务关联的索赔单ID,files为接口接收的上传文件集合(对应Postman上传的文件)
var result = new List<FileUploadResult>();

foreach (var file in files)
{
    // 移除原有写入webroot路径的逻辑,直接写入数据库
    var parameters = new DynamicParameters();
    parameters.Add("filename", file.FileName); 
        
    var filemessage = await _sqlconnection.QueryAsync<int>(@"
INSERT INTO [dbo].[OptionalFile] ([FileName]) VALUES (@filename); 
SELECT SCOPE_IDENTITY();", parameters);
        
    int FileMessageID = filemessage.First(); 
        
    // 修正原SQL拼接的注入风险,改用参数化写入关联表
    var crossParams = new DynamicParameters();
    crossParams.Add("ClaimID", claimID);
    crossParams.Add("FileID", FileMessageID);
    await _sqlconnection.QueryAsync<int>(@"
INSERT INTO [dbo].[ClaimCrossOptionalFile] (ClaimID,FileID)
VALUES (@ClaimID, @FileID);", crossParams);

    // 保留返回结果,符合原有接口出参格式
    result.Add(new FileUploadResult() { filename = file.FileName, Length = file.Length });
}

Postman测试步骤

  • 新建POST请求,填写你的接口地址
  • 切换到「Body」标签,选择form-data格式
  • Key列填写接口接收文件的参数名,鼠标悬停在Key输入框右侧,下拉选择类型为File
  • Value列点击「Select Files」可批量选择需要上传的文件
  • 发送请求即可完成文件名直接入库,不会生成本地存储的文件

可选优化点

  • 新增事务包裹循环逻辑,避免部分文件写入成功、部分失败导致的数据不一致
  • 新增文件名重复校验,可根据业务规则对重名文件做重命名处理
  • 如果后续需要存储文件本身而非仅存文件名,可在OptionalFile表新增FileContent字段(类型为varbinary(max)),直接将IFormFile的流转为字节数组存入该字段即可

内容的提问来源于stack exchange,提问作者user16251376

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 19:36:05