Shell32.ShellClass服务器操作系统无法获取 音频文件时长问题
前言:
上传音频文件,自动写入此音频文件的时长,这里用 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, -), "\\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, -), "\\d:\\d{2}:\\d{2}").Value; //时长
于是去服务器查看了文件的详细信息,如下图所示,并没有时长信息。
所以这个是由操作系统导致的GetDetailsOf(,)获取不到音频文件时长的问题。
3、解决方法:
这个问题主要是服务器没有安装关于音频的功能,添加上功能即可。


注意:安装这两个功能后服务器会被要求重启才能生效
Shell32.ShellClass服务器操作系统无法获取 音频文件时长问题的更多相关文章
- java 获取音频文件时长
需要导入jar包:jave 1.0.2 jar 如果是maven项目,在pom.xml文件中添加: <dependency> <groupId>it.sauronsoftwar ...
- C#中获取音频文件时长
1.在项目中添加引入:COM组件的Microsoft Shell Controls And Automation 2.在引用中找到Shell32,点击右键,在属性中将“嵌入互操作类型”的值改为“fal ...
- C#获取mp3文件时长、解决发布到服务器无法使用问题
首先引用COM组件:Microsoft Shell Controls And Automation,需要引用1.2版本的,1.0的会出问题. 这里需要注意DLL的属性Embed Interop Typ ...
- [原]通过配合ffmpeg.exe获取视频文件时长
import subprocess import os import time def getTime(flvpath,fid): #file_str = '1.flv' file_str = flv ...
- 使用NaturalDuration获取音频的时长
#region customizeTime ) sec = " + mediaElement.Position.Seconds.ToString(); else sec = mediaEle ...
- java获取音频文件播放时长
方法一: 在项目开发过程中,需要获取音视频文件时长.查询资料后发现 JAVE能够完美得到想要的结果,JAVE项目简介如下: The JAVE (Java Audio Video Encoder) li ...
- 以springMVC为例获取上传视频文件时长
毕设项目是一个在线学习系统,教师用户有上传视频的功能,在答辩之前赶了一个demo出来,好多功能都写死了,比如课程学习进度就是被我写死在前端的一个变量,最近导师要我把项目打包发给他,这才心慌慌赶紧把这些 ...
- windows server 2008 R2服务器无法通过ShellClass获取mp3音乐时长
我们先看一段代码,获取mp3播放时长: #region GetMediaDetailInfo 获取媒体文件属性信息 /// <summary> /// 获取媒体文件属性信息 /// < ...
- Python3.6_x86通过FFpmeg获取视频或音频的时长和分辨率
前言 前段时间公司在做流媒体服务,与许多厂家合作拿了许多视频过来,现在要对这些视频文件进行整理,通过特殊的编码排列,获取他们的时长以及分辨率,这里我遇到一个大坑,请往下面看. # -*- coding ...
随机推荐
- String.format(2)
转载:https://blog.csdn.net/feng_870906/article/details/6870788 String.format是在JDK1.5中新增的静态方法,功能强.它主要功能 ...
- PHP 生成类似 SqlServer NEWID() 全局唯一标识符
最近在对接SqlServer中对方有一个字段要求 SqlServer 中 有一个 NEWID() 就是生成36位的 唯一标识符 -> 8CBD3198-297D-4037-A859-B27BB ...
- Ubuntu下环境变量设置
[内容来自网络] 相应配置文件介绍: 1) /etc/profile :在登录时,操作系统定制用户环境使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,改文件被执行 2) /e ...
- sysbench fileio 压力测试
备注: 使用的是yum 安装 1. 安装 yum install -y sysbench 2. 命令 fileio options: --file-num=N number of files ...
- REX-Ray 了解
REX-Ray 是一个 EMC {code} 团队领导的开源项目,为 Docker.Mesos 及其他容器运行环境提供持续的存储访问.其设计旨在囊括通用存储.虚拟化和云平台,提供高级的存储功能. 当前 ...
- mui 拨打电话
function callPhone() { let btnArray = ['拨打', '取消']; let Phone = "10086"; mui.confirm('是否拨打 ...
- Ipython notebook 一些技巧
在模块后面输入:?,运行可以显示说明: 输入:??,运行可以显示源代码. 输入%matplotlib inline将matplotlib库导入,要显示的图片就可以嵌入到网页中了 %prun用于代码的执 ...
- bzoj 2395 [Balkan 2011]Timeismoney——最小乘积生成树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2395 如果把 \( \sum t \) 作为 x 坐标,\( \sum c \) 作为 y ...
- 老齐python-基础7(文件操作、迭代)
在python3中,没有file这个内建类型了(python2中,file是默认类型) 1.读文件 创建文件,130.txt 并在里面输入 learn python http://qiwsir.git ...
- dos命令行连接操作ORACLE数据库
C:\Adminstrator> sqlplus "/as sysdba" 查看是否连接到数据库 SQL> select status from v$instance; ...