Dephin源文请看 http://editblog.csdn.net/csdn/archive/2004/09/07/710.aspx 谢谢 张麟 同志的blog

.Net 版本 Web Service建立一个服务类代码

<%@ WebService Language="C#" Class="GetBinaryFile" %>

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;
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版]相关推荐

  1. jQuery调用WebService返回JSON数据

    相信大家都比较了解JSON格式的数据对于ajax的方便,不了解的可以从网上找一下这方面的资料来看一下,这里就不多说了,不清楚的可以在网上查一下,这里只说一下因为参数设置不当引起的取不到返回值的问题. ...

  2. ajax处理返回的xml数据,使用AJAX调用WebService返回xml不返回json原因以及解决办法...

    初次尝试用AJAX调用webservice,结果无论怎么设置webservice返回的都是xml对象,一般的jquery处理json是更方便的. webservice理论上将下面这段代码按照说明取消注 ...

  3. WebService传递XML数据 C#DataSet操作XML 解析WebService返回的XML数据

    贴图  知乎:显著提升程序员身心健康和工作效率的装备有哪些? 笔记本:  1.银河舰队 PAVILION 15-bc011TX光暗影精灵2  2.顽石 -FL5900U7500超薄i7(性价比最高) ...

  4. WebForm使用HttpWebRequest 调用webservice返回json

    WebForm使用HttpWebRequest 调用webservice返回json 调用webservice部分:返回的是json 调用webservice部分:返回的是json public st ...

  5. android 网易云短信,求助:网易云音乐v6.0安卓版,如何关闭“自动匹配曲目信息”?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 如题.请教各路大神,有谁知道如何关闭 手机端网易云音乐的"自动匹配曲目信息"这个功能? (我用的是安卓手机端的网易云音乐 v6.0版. ...

  6. 对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成。

    说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.InvalidOperationExcep ...

  7. 定义银行账户类Account,有属性:卡号cid,余额balance,所属用户Customer 银行账户类Account有方法: (1)getInfo(),返回String类型,返回卡的详细信息

    //定义银行账户类Account,有属性:卡号cid,余额balance,所属用户Customer //银行账户类Account有方法: //(1)getInfo(),返回String类型,返回卡的详 ...

  8. 《电脑编程技巧与维护》2011年第24期刊登出《DB 查询分析器》批量执行DML语句并返回更详细的信息

    国家级科技期刊<电脑编程技巧与维护>编辑部寄来的2011年第24期(即12月下)样刊,在2011年第24期(即12月 下),刊登出了本人的论文------"<DB 查询分析 ...

  9. 上海酒店分布api,返回上海市政宾馆信息

    由上海信息委提供的上海酒店分布数据,聚合数据免费开放,上海酒店分布api将返回上海市政宾馆信息,包括名称和地址. 接口名称:上海酒店分布api 接口平台:免费api接口 接口地址:http://op. ...

最新文章

  1. 后台开发经典书籍--大型分布式网站架构设计与实践
  2. 蓝牙Bluetooth技术手册规范下载【转】
  3. LeetCode —— 1554. 只有一个不同字符的字符串(Python)
  4. FastDFS分布式文件系统
  5. 前端date format_前端面试-手撕代码篇
  6. 全面使用禅道做敏捷开发的规范化管理分享
  7. 一图读懂resnet神经网络
  8. hplus java_Java HijrahDate plus(long, TemporalUnit)用法及代码示例
  9. 针对BT防御方案——飞鱼星路由器
  10. 大话西游片尾曲-一生所爱(世界是巨大的枷锁,你不得不重复自己或是别人的生活)
  11. 解决go合约fabric shim peer依赖问题
  12. Try tracing
  13. 解密Kerberos流量
  14. SpringBoot 接口数据加解密实战!
  15. 【龙芯1c库】封装模拟I2C接口和使用示例
  16. 认认真真推荐10个优秀的公众号
  17. tf.nn.dynamic_rnn返回值详解
  18. kubernetes-1.23.6版本部署
  19. app ui设计规范
  20. kernel停在Starting kernel 分析

热门文章

  1. 递归法:走楼梯; 旋转数组的最小数字(递归法和改进二分法)
  2. [Python] 关键字 assert
  3. docker 部署Gitlab
  4. 安卓使用intent切换到同级窗口和子窗口,并从子窗口中获取返回数据
  5. Quartus报错Error (170040): Can‘t place all RAM cells in design Info (170034)的解决办法
  6. android 启动一个应用,android 在一个应用中启动另一个应用
  7. C#设计模式---迭代器模式(Iterator Pattern)
  8. python测试rabbitmq简易实例
  9. PHP学习笔记(八)
  10. 数据结构之散列表实现