前言:服务器
上传音频文件,自动写入此音频文件的时长,这里用 COM组件Microsoft Shell Controls And Automation来实现。测试
首先spa
一、引用:Microsoft Shell Controls And Automation操作系统
注意:这里是1.0版本的,有的使用的是1.2版本的,若是1.0的有问题,请换成1.2的3d
二、代码以下code
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)
上面这段代码在本地测试的时候是彻底可以读到的blog
可是发布在服务器上的时候,下面句代码会报错,缘由是GetDetailsOf(item, -1)方法获取不到任何信息string
string strTime = System.Text.RegularExpressions.Regex.Match(dir.GetDetailsOf(item, -1), "\\d:\\d{2}:\\d{2}").Value; //时长
因而去服务器查看了文件的详细信息,以下图所示,并无时长信息。it
因此这个是由操做系统致使的GetDetailsOf(,)获取不到音频文件时长的问题。io
三、解决方法:
这个问题主要是服务器没有安装关于音频的功能,添加上功能便可。
注意:安装这两个功能后服务器会被要求重启才能生效