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

ASP.NET Core Web API上传图片至Umbraco媒体文件夹报错求助

Umbraco 3.2.2上传图片到媒体子文件夹报错“文件容器不存在”解决方案

先给结论:完全可以将图片上传到Umbraco后台媒体文件夹的子文件夹,你遇到的错误是代码逻辑问题导致的,以下是原因和修复方案:

错误根源

你手动创建物理目录并保存文件,再用MediaService创建媒体项,这打乱了Umbraco的媒体管理机制——Umbraco会自己管理媒体文件的存储结构,不需要你手动操作物理文件,手动创建目录会导致Umbraco的内部容器结构未正确初始化,从而抛出“文件容器不存在”错误。

修复后的代码

直接用Umbraco API处理上传的文件流,无需手动操作物理文件:

[HttpPost("/agents/logo-upload")]
public async Task<IActionResult> UploadImage([FromForm]IFormFile file)
{
    if (file == null || file.Length == 0)
    {
        return BadRequest("No file uploaded.");
    }

    try
    {
        var folderName = _authenticationService.GetAgent().Agency.Name;
        folderName = folderName.Trim().Replace(" ", "").ToLower();

        // 查找或创建目标媒体文件夹
        var existingFolder = _mediaService.GetRootMedia()
            .FirstOrDefault(m => m.Name.InvariantEquals(folderName));

        if (existingFolder == null)
        {
            existingFolder = _mediaService.CreateMedia(folderName, Constants.System.Root, "Folder");
            _mediaService.Save(existingFolder);
        }

        // 基于上传的文件流创建媒体项
        var media = _mediaService.CreateMedia(
            Path.GetFileName(file.FileName), 
            existingFolder.Id, 
            Constants.Conventions.MediaTypes.Image);

        using (var stream = file.OpenReadStream())
        {
            media.SetValue(
                _mediaFileManager, 
                _mediaUrlGeneratorCollection, 
                _shortStringHelper, 
                _contentTypeBaseServiceProvider, 
                Constants.Conventions.Media.File, 
                file.FileName, 
                stream);
        }

        _mediaService.Save(media);

        return Ok(new { MediaId = media.Id });
    }
    catch (Exception ex)
    {
        _logger.LogError(ex, "Error while uploading image.");
        return StatusCode(500, "Internal server error");
    }
}

核心修复点

  • 删掉手动创建物理目录、保存文件的代码,直接使用IFormFile的流传递给Umbraco的SetValue方法
  • Umbraco会自动处理媒体文件的存储路径和物理文件创建,不需要手动干预文件系统
  • 确保媒体文件夹创建后立即调用Save,保证Umbraco内部的容器结构正确初始化

额外注意事项

  • 确认_mediaFileManager、_mediaUrlGeneratorCollection等依赖服务已正确注入到控制器
  • 检查appsettings.json中Umbraco:Storage配置,确保存储路径正确且应用程序有读写权限
  • 若需自定义媒体存储路径,通过Umbraco配置修改,不要手动修改物理目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:29:52