You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 5实现数据库文件下载并保存至wwwroot目录

ASP.NET Core 5 实现从数据库下载文件到wwwroot目录

已在ASP.NET Core 5中实现将文件上传至documentUploadProvinceLevels数据库表的功能,现需实现文件下载功能,将下载的文件保存至项目的wwwroot目录。

上传代码

public bool UploadAvatarProvinceDB(IFormFile file, RegisterViewModel document)
{
        if (file != null)
        {
            if (file.Length > 0)
            {
                int department = 1;
                document.uploadDate = DateTime.Now;
                document.fileName = "no-document";
                document.description = "ثبت تصویر پرسنل";
                var docName = Path.GetFileName(file.FileName);
                var fileExtension = Path.GetExtension(docName);
                var newFileName = String.Concat(document.nationalCode, fileExtension);

                var objfiles = new DocumentUploadProvinceLevel()
                {
                    id = 0,
                    fileName = newFileName,
                    uploadDate = DateTime.Now,
                    title = "تصویر پرسنل",
                    fileFormat = fileExtension,
                    userId = document.nationalCode,
                    description = document.description,
                    department = department,
                    IsDelete=false
                };

                using (var target = new MemoryStream())
                {
                    file.CopyTo(target);
                    objfiles.dataBytes = target.ToArray();
                }
                _context.documentUploadProvinceLevels.Add(objfiles);
                _context.SaveChanges();

                return true;
            }
        }

        return false;
}

数据库表结构

数据库表结构


解决方案

1. 注入环境依赖

在服务类或控制器中注入IWebHostEnvironment,用于获取wwwroot目录的绝对路径:

private readonly IWebHostEnvironment _webHostEnv;
private readonly YourDbContext _dbContext;

// 构造函数注入依赖
public FileService(YourDbContext dbContext, IWebHostEnvironment webHostEnv)
{
    _dbContext = dbContext;
    _webHostEnv = webHostEnv;
}

2. 实现下载保存逻辑

创建方法从数据库读取文件字节流,写入到wwwroot指定目录:

public bool SaveFileToWwwroot(string userId)
{
    // 根据用户ID查询有效文件记录
    var fileRecord = _dbContext.documentUploadProvinceLevels
        .FirstOrDefault(d => d.userId == userId && !d.IsDelete);

    if (fileRecord == null || fileRecord.dataBytes == null)
    {
        return false;
    }

    // 定义wwwroot下的目标存储目录(示例:wwwroot/UploadedFiles)
    string targetDir = Path.Combine(_webHostEnv.WebRootPath, "UploadedFiles");
    // 目录不存在则创建
    if (!Directory.Exists(targetDir))
    {
        Directory.CreateDirectory(targetDir);
    }

    // 拼接完整文件路径
    string fullFilePath = Path.Combine(targetDir, fileRecord.fileName);

    // 将字节数组写入文件
    File.WriteAllBytes(fullFilePath, fileRecord.dataBytes);

    return true;
}

3. 控制器接口调用

在控制器中暴露接口,供外部触发下载保存操作:

[ApiController]
[Route("api/[controller]")]
public class FileController : ControllerBase
{
    private readonly FileService _fileService;

    public FileController(FileService fileService)
    {
        _fileService = fileService;
    }

    [HttpGet("save-to-wwwroot/{userId}")]
    public IActionResult SaveFile(string userId)
    {
        bool isSuccess = _fileService.SaveFileToWwwroot(userId);
        if (isSuccess)
        {
            return Ok("文件已成功保存至wwwroot/UploadedFiles目录");
        }
        return NotFound("未找到对应有效文件");
    }
}

注意事项

  • 确保部署环境中wwwroot目录具备写入权限,避免保存失败。
  • 可根据需求调整目标目录结构(例如按用户ID创建子目录),避免文件名冲突。
  • 如果需要同时支持返回文件给前端下载,可在控制器中直接返回File(fileRecord.dataBytes, "application/octet-stream", fileRecord.fileName)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:56:21