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

C#如何将Base64字符串转换为文档文件并保存到服务器指定路径

Base64上传文件转存实现方案

以下是基于你现有代码的完整实现逻辑:

核心实现步骤

  • 首先处理存储路径:将相对路径~/files/docs/转为应用实际运行的绝对路径,提前创建目录避免写入报错
  • 清理Base64前缀:过滤掉可能存在的data:application/pdf;base64,这类Data URI前缀,仅保留有效Base64内容
  • 解码Base64为字节数组
  • 写入文件到目标路径,可按需增加重名规避逻辑

完整代码示例

// 提前初始化目标存储目录
string saveRootPath = Path.Combine(AppContext.BaseDirectory, "files", "docs");
if (!Directory.Exists(saveRootPath))
{
    Directory.CreateDirectory(saveRootPath);
}

foreach (var fat in files)
{
    var fileContent = fat.file;
    string fileExt = Path.GetExtension(fat.name).ToUpper();
    // 校验允许的扩展名
    var allowedExts = new HashSet<string> { ".PDF", ".PPT", ".DOC", ".DOCX", ".XLSX", ".XLS", ".JPG" };
    if (!allowedExts.Contains(fileExt))
    {
        // 非允许格式可直接跳过或抛出业务异常
        continue;
    }

    try
    {
        // 清理Base64可能带的Data URI前缀
        if (fileContent.Contains(","))
        {
            fileContent = fileContent.Split(',')[1];
        }

        // Base64转字节数组
        byte[] fileBytes = Convert.FromBase64String(fileContent);

        // 生成文件名,加GUID避免重名覆盖,不需要的话可以直接用fat.name
        string fileName = $"{Path.GetFileNameWithoutExtension(fat.name)}_{Guid.NewGuid():N}{fileExt}";
        string fullSavePath = Path.Combine(saveRootPath, fileName);

        // 写入文件
        File.WriteAllBytes(fullSavePath, fileBytes);
    }
    catch (FormatException)
    {
        // Base64格式非法的异常处理逻辑
    }
    catch (IOException)
    {
        // 文件写入失败(权限不足、磁盘满等)的异常处理逻辑
    }
}

注意事项

如果你的业务场景允许重名文件覆盖,可以删除文件名拼接GUID的逻辑,直接使用原文件名fat.name即可;如果对文件安全性要求较高,建议补充文件头魔数校验,避免攻击者伪造扩展名上传恶意文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:24:05