微信话音——判断上传的音频时长

微信语音——判断上传的音频时长




           今天在测试同事的微信平台的发送语音的时候,发现有时候语音能发过来,有时候就不行,经过检查,发现丢掉了检测音频时长(微信里面语言时长要限定在60S内),好吧,我补上,闲着也是闲着~



                    首先是读取语音的时长:


            

<span style="font-size:14px;"> /// <summary>
        /// 获取上传音频的时间长度
        /// </summary>
        /// <param name="strFullUrl">The STR full URL.</param>
        /// <returns>System.String.</returns>
        /// <remarks>Editor:v-liuhch CreateTime:2015/5/15 17:32:57</remarks>
        public string GetLocalVoiceTotalTime(string strFullUrl)
        {

            ShellClass sh = new ShellClass();
            Folder dir = sh.NameSpace(Path.GetDirectoryName(strFullUrl));
            FolderItem item = dir.ParseName(Path.GetFileName(strFullUrl));
            return dir.GetDetailsOf(item, 27); // 获取歌曲时长。

        }</span>



            使用shellclass的时候要先引用COM组件Microsoft Shell Controls And Automation,并将Embed Interop Type 设为False



                    由于上述函数只支持读取本地文件,所以,我们将得到的文件先放在临时文件夹中,判断完成之后立即删除。



             

<span style="font-size:14px;">/// <summary>
        /// 检查上传音频文件的总时间长度是否小于60s
        /// </summary>
        /// <param name="file">The file.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
        /// <remarks>Editor:v-liuhch CreateTime:2015/5/15 17:34:51</remarks>
        public bool ChkVideoTotalTime(HttpPostedFile file)
        {
            string strTempUrl = Path.GetTempPath() + DateTime.Now.ToString("yyyyMMddHHmmssfff").ToString() + Path.GetExtension(file.FileName);
            file.SaveAs(strTempUrl);//保存到本地临时文件夹

            try
            { 
                string strTotalTime = GetLocalVoiceTotalTime(strTempUrl);  //获取文件时长

                return (Convert.ToDateTime(strTotalTime) - Convert.ToDateTime("00:01:00")).Seconds > 0 ? false : true;

            }
            catch (Exception)
            { return false;}
            finally { System.IO.File.Delete(strTempUrl);}//删除临时文件 
        }
</span>



               之后,在处理文件之前加入如下判断就ok了:


 

<span style="font-size:14px;">  if (int.TryParse(HttpContext.Current.Request.QueryString["MaterialVoice"], out MaterialVoice))//如果是素材里面上传音频的话
                    {
                        if (!ChkVideoTotalTime(files[0]))
                        {
                            return strRequest = "errorTime";  //如果超过60s
                        }
                    }</span>



               PS:别忘了前台验证。