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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:55:27