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 ...
随机推荐
- bzoj 5288 游戏
bzoj 5288 游戏 显然从点 \(x\) 出发,能到达的点是包含 \(x\) 的一段区间.用 \(L,R\) 两个数组记录每个点对应的区间端点. 如果能预处理出 \(L,R\) ,询问显然可以 ...
- DVD项目
package sy.com.cn;import java.util.*; public class DvdWorker { public static void main(String[]args) ...
- hdu 2461 Rectangles
求矩形的并 矩形个数 1...20m次询问 回答要求的r个矩形的并容斥原理dfs优化: 遇到面积交为0时 这个dfs分支可以不下去了 #include <iostream> #includ ...
- 如何将angular-ui-bootstrap的分页组件封装成一个指令
准备工作: (1)一如既往的我还是使用了requireJS进行js代码的编译 (2)必须引入angualrJS , ui-bootstrap-tpls-1.3.2.js , bootstrap.css ...
- jQuery实现清空table表格除首行外的所有数据
1.其实网上有很多版本,试了好几个都不行,最后还是查到了一个非常方便的:不会清除表格第一行表头部分. 其中J_tab_fam是table的id. ? 1 $("#J_tab_fam tr: ...
- 写动态库时遇到了symbol lookup error问题
之前写TLPI上的代码一直是手动进行错误处理,感觉代码冗余量很大,最后还是决定使用书上的tlph_hdr.h,顺便回顾下动态库的创建/使用. 参考很久之前的一篇博客 linux上静态库和动态库的编译和 ...
- 将socket程序从linux移植到windows上
今天突然想试下纯socket编程在两个系统上代码重合量有多大,只要不使用VC自定义的宏(比如SOCKET.SOCKADDR等等)感觉代码重合量挺大的. 比如最简单的TCP客户端和服务端对话,在VC中用 ...
- 谈谈GPU与FPGA的一些看法
从几个方面来介绍一下GPU和FPGA. 从峰值性能来说,GPU(10Tflops)远远高于FPGA(<1TFlops).GPU上面成千上万个core同时跑在GHz的频率上还是非常壮观的,最新的G ...
- .NET的URL重写
[概述] URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程.重写URL是非常有用的一个功能,因为它可以让你提高搜索引擎阅读和索引你的网站的能力:而且在你改变了 ...
- ActiveMQ之一--ActiveMQ入门
MQ的消费-生产者模型的一个典型的代表,一端往消息队列中不断的写入消息,而另一端则可以读取或者订阅队列中的消息.MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义 ...