我用下面的代码从我的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