2012-03-05 103 views
2

如何读取.mp3音频文件? 我写了下面的代码。如何阅读wcf中的.mp3文件?

public static byte[] ReadFully(Stream stream) 
     { 
      byte[] buffer = new byte[32768]; 
      using (MemoryStream ms = new MemoryStream()) 
      { 
       while (true) 
       { 
        int read = stream.Read(buffer, 0, buffer.Length); 
        if (read <= 0) 
         return ms.ToArray(); 
        ms.Write(buffer, 0, read); 
       } 
      } 

它接受.3gp,.caf foramat流,为什么它没有采取.mp3文件? }

+0

你确定你已经在IIS中注册了相关的MIME类型吗? – Rajesh 2012-03-05 09:32:00

+0

是的,在iis .mp3 MIME类型有,但它不接受该格式的流。 – user1237131 2012-03-05 09:36:00

+0

我写的服务保存给移动团队的音频文件。他们正在成功保存.3gp,.caf文件audio.but .mp3无法保存是否是原因? – user1237131 2012-03-05 11:36:41

回答

1

我用下面的代码从我的REST WCF服务下载MP3文件:

 [WebGet] 
     public Stream GetMp3() 
     { 
      byte[] buffer; 
      WebOperationContext.Current.OutgoingResponse.ContentType = "audio/mp3";    
      using (FileStream ms = new FileStream(@"C:\Sample.mp3", FileMode.Open)) 
      { 
       int length = (int)ms.Length; 
       WebOperationContext.Current.OutgoingResponse.ContentLength = length; 
       buffer = new byte[length]; 
       int sum = 0; 
       int count; 
       while ((count = ms.Read(buffer, sum, length - sum)) > 0) 
       { 
        sum += count; 
       } 
       ms.Close(); 
      } 
      return new MemoryStream(buffer); 
     } 

UPDATE:上传MP3文件到宁静的WCF服务

服务器端的方法:

 [WebInvoke] 
     public string RecieveMp3(Stream mp3Stream) 
     { 
      byte[] buffer = new byte[5000000]; 
      using (FileStream ms = new FileStream("C:\\Temp\\Test1.mp3", FileMode.OpenOrCreate)) 
      {     
       int read = mp3Stream.Read(buffer, 0, buffer.Length); 
       ms.Write(buffer, 0, read);     
      } 
      return "Recieved Mp3 file"; 
     } 

NOTE: 1.确保您具有文件夹的权限,以便为与该文件关联的用户写入mp3文件在其下运行wcf服务的应用程序池 2.出于测试目的,我已将硬编码的字节数组大小设置为较大值。使用第三方DLL用于调用称为RestSharp REST服务

 private string UseRestSharpApproachForFiles(string serviceBaseUrl, string resourceUrl, Method method, string filepath) 
     { 
      var client = new RestClient(); 
      client.BaseUrl = serviceBaseUrl;    
      var request = new RestRequest(method) { DateFormat = DataFormat.Xml.ToString(), Resource = resourceUrl }; 
      request.AddFile("stream", filepath); 
      var response = client.Execute(request); 
      string responseString; 
      if (response.StatusCode == HttpStatusCode.OK) 
      { 
       responseString = HttpUtility.HtmlDecode(response.Content); 
      } 
      else 
      { 
       responseString = response.StatusDescription + " --------------------" + HttpUtility.HtmlDecode(response.Content); 
      } 
      return responseString; 
     } 

AM:

客户端调用服务。