前言:
上传音频文件,自动写入此音频文件的时长,这里用 COM组件Microsoft Shell Controls And Automation来实现。
首先
1、引用:Microsoft Shell Controls And Automation
注意:这里是1.0版本的,有的使用的是1.2版本的,如果1.0的有问题,请换成1.2的
2、代码如下
string strFileName = FileHelper.MapPath(linkUrl);//linkUrl是上传到服务器的路径 string dirName = System.IO.Path.GetDirectoryName(strFileName); string SongName = System.IO.Path.GetFileName(strFileName);//获得名称 FileInfo fInfo = new FileInfo(strFileName); Shell32.ShellClass sh = new Shell32.ShellClass(); Shell32.Folder dir = sh.NameSpace(dirName); Shell32.FolderItem item = dir.ParseName(SongName); string strTime = System.Text.RegularExpressions.Regex.Match(dir.GetDetailsOf(item, -1), "\\d:\\d{2}:\\d{2}").Value; //时长 duration = Convert.ToInt64(TimeSpan.Parse(strTime).TotalSeconds); //音频的时常,单位秒 size = fInfo.Length;//字节数(这个是获取文件大小,单位是Byte)
上面这段代码在本地测试的时候是完全能够读到的
但是发布在服务器上的时候,下面句代码会报错,原因是GetDetailsOf(item, -1)方法获取不到任何信息
string strTime = System.Text.RegularExpressions.Regex.Match(dir.GetDetailsOf(item, -1), "\\d:\\d{2}:\\d{2}").Value; //时长
于是去服务器查看了文件的详细信息,如下图所示,并没有时长信息。
所以这个是由操作系统导致的GetDetailsOf(,)获取不到音频文件时长的问题。
3、解决方法:
这个问题主要是服务器没有安装关于音频的功能,添加上功能即可。
注意:安装这两个功能后服务器会被要求重启才能生效