在是用WTM过程中,遇到了上传视频并播放的需求。期初,我也是翻了翻MS文档,发现实现过程也挺复杂的。后来一想,自己用的是WTM框架,自带文件上传,于是我请群里的大佬Rea帮忙测试。结果发现几百兆的文件上传毫无压力。
一、创建上传模型public class VideoTest: basePoco
{
[Display(Name = "视频标题")]
public string Title { get; set; }
public FileAttachment File { get; set; }
[Display(Name = "选择视频")]
public Guid FileId { get; set; }
}
就和你使用WTM内置的模型中,实现用户管理中的图片是一样的。详细参照,WTM官当文档中有附件的模型章节。
二、修改appsettings.json由于WTM内置上传文件的保存方式,可选Database,local,oss,默认的是Database,文件数据全部以二进制文件保存,直接存数据库是不是压力山大,所以修改一下改为本地或第三方云存储。我这里选本地。
1、修改FileUploadOptions SaveFileMode的值为local
2、修改FileUploadOptions Settings GroupLocation ./upload(或者是绝对路径)
三、生成业务与视图代码这个没啥好说的,WTM代码生成器使用简单快捷,我这里也不多说了。啥也不用设置,一直下一步就行了。生成的代码,重启下web就可以直接使用了
为了能实现预览功能,我们抄frameworkUser的listvm代码,修改VideoTestListVM代码。
添加FileIdFormat方法,对文件进行格式化。
private ListFileIdFormat(Report_View entity, object val) { return new List { ColumnFormatInfo.MakeDownloadButton(ButtonTypesEnum.Button,entity.FileId), ColumnFormatInfo.MakeViewButton(ButtonTypesEnum.Button,entity.FileId,640,480), }; }
在InitGridHeader中添加this.MakeGridHeader(x => x.FileId).SetFormat(FileIdFormat)。
在GetSearchQuery修改为
try
{
var query = DC.Set()
.CheckContain(Searcher.Title, x => x.Title)
.Select(x => new Report_View
{
ID = x.ID,
Title = x.Title,
FileId = x.FileId,
})
.OrderBy(x => x.ID);
return query;
}
catch (Exception ex)
{
throw;
}
这样,我们在重新启动程序。
进入对应的list后点击预览,可以查看刚刚上传的视屏
四、使用H5视频播放直接使用内置的文件访问接口即可,在WTM、独立HTML和SPA应用中同样适用。建议将appsettings.json中IsFilePublic,修改为true。这样不需要登录就可以访问文件了,要不然SPA转化图片或视频是真的麻烦



