我用下面的代碼從我的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:
客戶端調用服務。
你確定你已經在IIS中註冊了相關的MIME類型嗎? – Rajesh 2012-03-05 09:32:00
是的,在iis .mp3 MIME類型有,但它不接受該格式的流。 – user1237131 2012-03-05 09:36:00
我寫的服務保存給移動團隊的音頻文件。他們正在成功保存.3gp,.caf文件audio.but .mp3無法保存是否是原因? – user1237131 2012-03-05 11:36:41