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
相关产品推荐
相关产品推荐

