[1.1]用WebService返回歌曲的曲目信息.借鉴[星集工作室 张麟 Dephi版]
.Net 版本 Web Service建立一个服务类代码
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web.UI;
using System.IO;
[WebService(Namespace = "http://localhost/WebMp3Downloads/", Description = "在WebServices里利用Dot.Net框架进行文件传输")]
public class GetBinaryFile : System.Web.Services.WebService {
[WebMethod]
public string HelloWorld() {
return "Hello World";
}
[WebMethod(Description ="提供MP3的2进制流下载服务")]
public byte[] GetMp3File(string requestFileName)
{
//得到服务器端的一个文件
if (requestFileName == null||requestFileName==string.Empty)
{
return getBinaryFile("D:\\1.mp3");
}
else
{
return getBinaryFile("D:\\" + requestFileName);
}
}
/**//// <summary>
/// 将文件转化成2进制流 ConvertFileStreamToByteBuffer
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public byte[] getBinaryFile(string filename)
{
if (File.Exists(filename))
{
try
{
//打开现有文件以进行读取。
FileStream s = File.OpenRead(filename);
return this.ConvertStreamToByteBuffer(s);
}
catch
{
return new byte[0];
}
}
else
{
return new byte[0];
}
}
/**//// <summary>
/// 将流文件转化成2进制字节数组Convert FileStream Into Byte
/// </summary>
/// <param name="theStream"></param>
/// <returns></returns>
public byte[] ConvertStreamToByteBuffer(System.IO.Stream theStream)
{
int b1;
System.IO.MemoryStream tempStream = new System.IO.MemoryStream();
while ((b1 = theStream.ReadByte()) != -1)
{
tempStream.WriteByte(((byte)b1));
}
return tempStream.ToArray();
}
/**//// <summary>
/// 返回传送文件的文件类型 Get File Type of the Specific File
/// </summary>
/// <returns></returns>
[WebMethod(Description = "返回传送文件的文件类型")]
public string GetFileType(string fileName)
{
return "Text/txt";
}
/**//// <summary>
/// 返回传送文件的题头信息的类,以SOAP返回Tag类
/// </summary>
/// <returns></returns>
[WebMethod(Description ="返回传送文件的题头信息的类,以SOAP返回类")]
public Mp3Tag GetMp3Taginfo(string fileName)
{
byte[] bMp3Tag = this.GetMp3File(fileName);
Mp3Tag mt=new Mp3Tag(bMp3Tag);
return mt;
}
}
然后我们再添加一个存储了Mp3Tag题头的类 Mp3Tag.Class
using System.Text;
/**//// <summary>
/// Summary description for Mp3Tag
/// MP3的基本歌曲信息存在了MP3文件的最后128个字节里
/// 用于解读Mp3歌曲的题头信息
/// Sign Length
/// (bytes) Position
///(bytes) Description
///A 3 (0-2) Tag identification. Must contain 'TAG' if tag exists and is correct.
///B 30 (3-32) Title
///C 30 (33-62) Artist
///D 30 (63-92) Album
///E 4 (93-96) Year
///F 30 (97-126) Comment
///G 1 (127) Genre
/// </summary>
public class Mp3Tag
{
private byte[] TAGBody = new byte[128];
private byte[] sTag = new byte[3];
private byte[] sTitle = new byte[30];
private byte[] sArtist = new byte[30];
private byte[] sAlbum = new byte[30];
private byte[] sYear = new byte[4];
private byte[] sComment = new byte[30];
private byte[] sGenre = new byte[1];
//自定义的异常类
System.Exception myException;
/**//**/
/**///
/// 以下是属性,只读,获取Mp3音乐格式的题头信息
//
public string Title
{
get
{
return Encoding.Default.GetString(sTitle);
}
}
/**//// <summary>
/// 艺术家
/// </summary>
/// <value></value>
public string Artist
{
get
{
return Encoding.Default.GetString(sArtist);
}
}
/**//// <summary>
/// 曲目
/// </summary>
/// <value></value>
public string Album
{
get
{
return Encoding.Default.GetString(sAlbum);
}
}
/**//// <summary>
/// 出版年月
/// </summary>
/// <value></value>
public string Year
{
get
{
return Encoding.Default.GetString(sYear);
}
}
/**//// <summary>
/// 注释
/// </summary>
/// <value></value>
public string Comment
{
get
{
return Encoding.Default.GetString(sComment);
}
}
/**//// <summary>
/// 获取音乐文件的分类
/// </summary>
/// <value></value>
public string Genre
{
get
{
switch (Convert.ToInt16(sGenre[0]))
{
case 0: return "Blues";
case 20: return "Alternative";
case 40: return "AlternRock";
case 60: return "Top 40";
case 1: return "Classic Rock";
case 21: return "Ska";
case 41: return "Bass";
case 61: return "Christian Rap";
case 2: return "Country";
case 22: return "Death Metal";
case 42: return "Soul";
case 62: return "Pop/Funk";
case 3: return "Dance";
case 23: return "Pranks";
case 43: return "Punk";
case 63: return "Jungle";
case 4: return "Disco";
case 24: return "Soundtrack";
case 44: return "Space";
case 64: return "Native American";
case 5: return "Funk";
case 25: return "Euro-Techno";
case 45: return "Meditative";
case 65: return "Cabaret";
case 6: return "Grunge";
case 26: return "Ambient";
case 46: return "Instrumental Pop";
case 66: return "New Wave";
case 7: return "Hip-Hop";
case 27: return "Trip-Hop";
case 47: return "Instrumental Rock";
case 67: return "Psychadelic";
case 8: return "Jazz";
case 28: return "Vocal";
case 48: return "Ethnic";
case 68: return "Rave";
case 9: return "Metal";
case 29: return "Jazz+Funk";
case 49: return "Gothic";
case 69: return "Showtunes";
case 10: return "New Age";
case 30: return "Fusion";
case 50: return "Darkwave";
case 70: return "Trailer";
case 11: return "Oldies";
case 31: return "Trance";
case 51: return "Techno-Industrial";
case 71: return "Lo-Fi";
case 12: return "Other";
case 32: return "Classical";
case 52: return "Electronic";
case 72: return "Tribal";
case 13: return "Pop";
case 33: return "Instrumental";
case 53: return "Pop-Folk";
case 73: return "Acid Punk";
case 14: return "R&B";
case 34: return "Acid";
case 54: return "Eurodance";
case 74: return "Acid Jazz";
case 15: return "Rap";
case 35: return "House";
case 55: return "Dream";
case 75: return "Polka";
case 16: return "Reggae";
case 36: return "Game";
case 56: return "Southern Rock";
case 76: return "Retro";
case 17: return "Rock";
case 37: return "Sound Clip";
case 57: return "Comedy";
case 77: return "Musical";
case 18: return "Techno";
case 38: return "Gospel";
case 58: return "Cult";
case 78: return "Rock & Roll";
case 19: return "Industrial";
case 39: return "Noise";
case 59: return "Gangsta";
case 79: return "Hard Rock";
default:
return "未知类型";
}
}
}
public Mp3Tag()
{
}
public Mp3Tag(byte[] Tag)
{
if (Tag.Length!=128)
{
// this.myException = new Exception("不是标准的Mpeg-Mp3 Tag格式.<br>Tag长度应该是128 Byte.");
// throw this.myException;
int sourceIndex = Tag.Length-128;
Array.Copy(Tag,sourceIndex,this.TAGBody, 0,128);
}
else
{
Array.Copy(Tag,this.TAGBody,128);
}
//B
Array.Copy(this.TAGBody, 3, this.sTitle, 0, 30);
//C
Array.Copy(this.TAGBody, 33, this.sArtist, 0, 30);
//D
Array.Copy(this.TAGBody, 63, this.sAlbum, 0, 30);
//E
Array.Copy(this.TAGBody, 93, this.sYear, 0, 4);
//F
Array.Copy(this.TAGBody, 97, this.sComment, 0, 30);
//G
Array.Copy(this.TAGBody, 127, this.sGenre, 0, 1);
}
}
好,我们集成测试一下.在Web Developer 2005 Express 测试通过
转载于:https://www.cnblogs.com/SlashOut/archive/2005/03/31/129321.html
[1.1]用WebService返回歌曲的曲目信息.借鉴[星集工作室 张麟 Dephi版]相关推荐
- jQuery调用WebService返回JSON数据
相信大家都比较了解JSON格式的数据对于ajax的方便,不了解的可以从网上找一下这方面的资料来看一下,这里就不多说了,不清楚的可以在网上查一下,这里只说一下因为参数设置不当引起的取不到返回值的问题. ...
- ajax处理返回的xml数据,使用AJAX调用WebService返回xml不返回json原因以及解决办法...
初次尝试用AJAX调用webservice,结果无论怎么设置webservice返回的都是xml对象,一般的jquery处理json是更方便的. webservice理论上将下面这段代码按照说明取消注 ...
- WebService传递XML数据 C#DataSet操作XML 解析WebService返回的XML数据
贴图 知乎:显著提升程序员身心健康和工作效率的装备有哪些? 笔记本: 1.银河舰队 PAVILION 15-bc011TX光暗影精灵2 2.顽石 -FL5900U7500超薄i7(性价比最高) ...
- WebForm使用HttpWebRequest 调用webservice返回json
WebForm使用HttpWebRequest 调用webservice返回json 调用webservice部分:返回的是json 调用webservice部分:返回的是json public st ...
- android 网易云短信,求助:网易云音乐v6.0安卓版,如何关闭“自动匹配曲目信息”?...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 如题.请教各路大神,有谁知道如何关闭 手机端网易云音乐的"自动匹配曲目信息"这个功能? (我用的是安卓手机端的网易云音乐 v6.0版. ...
- 对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成。
说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.InvalidOperationExcep ...
- 定义银行账户类Account,有属性:卡号cid,余额balance,所属用户Customer 银行账户类Account有方法: (1)getInfo(),返回String类型,返回卡的详细信息
//定义银行账户类Account,有属性:卡号cid,余额balance,所属用户Customer //银行账户类Account有方法: //(1)getInfo(),返回String类型,返回卡的详 ...
- 《电脑编程技巧与维护》2011年第24期刊登出《DB 查询分析器》批量执行DML语句并返回更详细的信息
国家级科技期刊<电脑编程技巧与维护>编辑部寄来的2011年第24期(即12月下)样刊,在2011年第24期(即12月 下),刊登出了本人的论文------"<DB 查询分析 ...
- 上海酒店分布api,返回上海市政宾馆信息
由上海信息委提供的上海酒店分布数据,聚合数据免费开放,上海酒店分布api将返回上海市政宾馆信息,包括名称和地址. 接口名称:上海酒店分布api 接口平台:免费api接口 接口地址:http://op. ...
最新文章
- 后台开发经典书籍--大型分布式网站架构设计与实践
- 蓝牙Bluetooth技术手册规范下载【转】
- LeetCode —— 1554. 只有一个不同字符的字符串(Python)
- FastDFS分布式文件系统
- 前端date format_前端面试-手撕代码篇
- 全面使用禅道做敏捷开发的规范化管理分享
- 一图读懂resnet神经网络
- hplus java_Java HijrahDate plus(long, TemporalUnit)用法及代码示例
- 针对BT防御方案——飞鱼星路由器
- 大话西游片尾曲-一生所爱(世界是巨大的枷锁,你不得不重复自己或是别人的生活)
- 解决go合约fabric shim peer依赖问题
- Try tracing
- 解密Kerberos流量
- SpringBoot 接口数据加解密实战!
- 【龙芯1c库】封装模拟I2C接口和使用示例
- 认认真真推荐10个优秀的公众号
- tf.nn.dynamic_rnn返回值详解
- kubernetes-1.23.6版本部署
- app ui设计规范
- kernel停在Starting kernel 分析
热门文章
- 递归法:走楼梯; 旋转数组的最小数字(递归法和改进二分法)
- [Python] 关键字 assert
- docker 部署Gitlab
- 安卓使用intent切换到同级窗口和子窗口,并从子窗口中获取返回数据
- Quartus报错Error (170040): Can‘t place all RAM cells in design Info (170034)的解决办法
- android 启动一个应用,android 在一个应用中启动另一个应用
- C#设计模式---迭代器模式(Iterator Pattern)
- python测试rabbitmq简易实例
- PHP学习笔记(八)
- 数据结构之散列表实现