我正在寻找通过REST将文件从紧凑框架传输到服务器的最佳方法。我有一个使用.net Web API创建的Web服务。我已经查看过几个涉及发送文件的SO问题和其他网站,但是它们似乎都不能满足我的需求。
我正在尝试将WM 6和6.5设备中的媒体文件发送到我的REST服务。虽然大多数文件少于300k,但奇数少数可能是2-10兆字节。有没有人有一些我可以用来做这项工作的片段?
谢谢!
答案 0 :(得分:2)
我认为这是发送文件的最低要求:
using (var fileStream = File.Open(@"\file.txt", FileMode.Open, FileAccess.Read, FileShare.Read))
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.destination.com/path");
request.Method = "POST"; // or PUT, depending on what the server expects
request.ContentLength = fileStream.Length; // see the note below
using (var requestStream = request.GetRequestStream())
{
int bytes;
byte[] buffer = new byte[1024]; // any reasonable buffer size will do
while ((bytes = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
requestStream.Write(buffer, 0, bytes);
}
}
try
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
}
}
catch (WebException ex)
{
// failure
}
}
注意:HTTP需要一种方法来了解您何时完成"发送数据。有三种方法可以实现这一目标:
request.ContentLength
,因为我们在发送任何内容之前知道文件的大小request.SendChunked
,以发送包含各自大小的数据块request.AllowWriteStreamBuffering
写入内存缓冲区,但我不建议在紧凑的框架上浪费那么多内存。