Umbraco 7拖拽上传媒体问题:切换至默认File/Image类型
解决Umbraco 7拖拽批量上传图片时"No property type exists with alias umbracoFile"错误
这个报错的原因很直观:你现在拖拽上传的目标媒体文件夹,默认使用了自定义的Top Banner(别名banner)媒体类型,但这个类型缺少Umbraco图片上传逻辑必需的umbracoFile属性。下面给你两种实用的解决思路,从快速修复到全局控制:
方法1:修改媒体文件夹的默认类型(最快解决)
Umbraco 7里每个媒体库文件夹都能单独设置默认媒体类型,大概率是这里的配置出了问题:
- 登录Umbraco后台,进入Media(媒体库)模块
- 找到你拖拽上传的目标文件夹,右键点击选择Properties(属性)
- 在属性窗口中,先确认Allowed media types(允许的媒体类型)里包含
Image(或File,根据你的需求) - 然后找到Default media type(默认媒体类型)选项,选择
Image并保存设置
完成后再拖拽上传图片,就会自动使用默认的Image类型,不会再触发报错了。
方法2:用代码全局强制图片上传使用Image类型(适合全局管控场景)
如果你的需求是无论上传到哪个媒体文件夹,图片都默认用Image类型,可以通过Umbraco的事件拦截来实现:
- 在项目的
App_Code文件夹(没有的话直接新建)里创建MediaEventHandler.cs文件 - 写入以下代码:
using Umbraco.Core; using Umbraco.Core.Events; using Umbraco.Core.Models; using Umbraco.Core.Services; using System.Linq; public class MediaEventHandler : ApplicationEventHandler { protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext) { // 监听媒体项创建前的事件 MediaService.Creating += MediaService_Creating; } private void MediaService_Creating(IMediaService sender, MediaEventArgs e) { var mediaItem = e.Entity; // 判断当前媒体项是否是带文件的上传操作,且误用了自定义banner类型 var hasFileProperty = mediaItem.Properties.Any(p => p.Alias == "umbracoFile"); if (mediaItem.ContentType.Alias == "banner" && hasFileProperty) { // 获取默认Image媒体类型并切换 var imageContentType = sender.GetMediaTypeByAlias("Image"); if (imageContentType != null) { mediaItem.ContentTypeId = imageContentType.Id; } } } }
- 保存文件后,重启Umbraco应用(比如回收站点应用池)
这段代码会在媒体项创建前自动拦截,一旦发现是误用banner类型的图片上传操作,就自动切换为默认的Image类型,从根源上避免错误。
额外小提示
- 如果你不需要
Top Banner作为上传选项,可以直接在媒体文件夹的Allowed media types里移除它,彻底避免误选 - 确认默认的
Image媒体类型确实包含umbracoFile属性——这是Umbraco自带的默认属性,除非被手动修改过,一般不会有问题
内容的提问来源于stack exchange,提问作者Abdul Rahim
相关产品推荐
相关产品推荐

