如何在WebApi中将字节数组图片保存到自定义文件夹?
解决将Base64图片保存为JPG到自定义文件夹的问题
你已经搞定了Base64到Image对象的转换,接下来只需要在现有逻辑基础上添加保存到指定文件夹的步骤就行。我帮你调整了代码,直接就能实现把图片以JPG格式存到自定义目录的需求:
public IHttpActionResult Post([FromBody]Game model) { // 替换原来的LoadImage,调用新增的保存方法,这里替换成你的自定义文件夹路径 Image img = SaveBase64ImageToJpg(model.Image, @"D:\YourProject\CustomImages"); Game game = model; // 如果需要把图片路径存到Game模型里,可以在这里赋值(记得先在Game类里加对应字段) // game.ImageStoragePath = Path.Combine(@"CustomImages", fileName); _repository.Add<Game>(game); return Ok(); } public Image SaveBase64ImageToJpg(string base64Image, string targetFolderPath) { // 拆分Base64字符串,提取实际编码内容 string[] str = base64Image.Split(','); byte[] bytes = Convert.FromBase64String(str[1]); Image image; using (MemoryStream ms = new MemoryStream(bytes)) { image = Image.FromStream(ms); // 确保目标文件夹存在,不存在则自动创建 if (!Directory.Exists(targetFolderPath)) { Directory.CreateDirectory(targetFolderPath); } // 生成唯一文件名,避免重复覆盖(这里用GUID,你也可以换成游戏ID+时间戳等业务相关规则) string fileName = $"{Guid.NewGuid()}.jpg"; string fullFilePath = Path.Combine(targetFolderPath, fileName); // 以JPG格式保存图片 image.Save(fullFilePath, System.Drawing.Imaging.ImageFormat.Jpeg); } return image; }
关键说明:
- 文件夹权限与创建:先用
Directory.Exists检查目标文件夹是否存在,不存在就用Directory.CreateDirectory创建,避免因文件夹缺失报错。同时要确保WebApi应用拥有该文件夹的写入权限,否则会抛出权限异常。 - 唯一文件名:用
Guid.NewGuid()生成唯一文件名,防止重复上传的图片覆盖旧文件。如果有业务需求,也可以换成游戏ID+时间戳这类更有意义的命名方式。 - JPG格式保存:调用
image.Save时必须指定ImageFormat.Jpeg参数,否则会默认以原图片格式保存。 - 可选:存储图片路径:如果需要在Game模型中记录图片的存储路径,可以在保存后把
fullFilePath或者相对路径赋值给Game的对应字段,方便后续读取。
内容的提问来源于stack exchange,提问作者lind rev
相关产品推荐
相关产品推荐

