2012-03-05 10 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

関連するMIMEタイプがIISに登録されていることを確認しましたか? – Rajesh

+0

iis .mp3にあります。MIMEタイプはありますが、そのフォーマットストリームを受け入れていません。 – user1237131

+0

私はモバイルチームに与えられたオーディオファイルを保存するためのサービスを書いています。彼らは.3gp、.caf foramtsを成功裏に保存していますaudio.but .mp3は保存できません。 – user1237131

答えて

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:RESTfulなWCFサービスにmp3ファイルをアップロード

サーバ側のメソッド:

 [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"; 
     } 

注: 1.このフォルダに関連付けられているユーザーのmp3ファイルを書き込む権限があることを確認しますWCFサービスが実行されているアプリケーションプール 2.テスト目的のために、私はバイト配列サイズを大きな値にハードコードしました。サービスを呼び出すために

クライアント:

 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; 
     } 

はRestSharpと呼ばれる残りのサービスを呼び出すためのサードパーティ製のDLLを使用しています。

関連する問題