读书人

silverlight 怎么获取服务器上的文件大

发布时间: 2013-06-25 23:45:41 作者: rapoo

silverlight 如何获取服务器上的文件大小

/// <summary>
/// 文件块大小为4M ( 如果文件总大小超过 _chunkSize 定义的大小,则把该文件切割成大小为 _chunkSize 的文件块分批下载 )
/// </summary>
private int _chunkSize = 4 * 1024 * 1024;

/// <summary>
/// 已经下载的字节数
/// </summary>
private long _downloadedBytes = 0;

/// <summary>
/// 要下载的文件的总大小
/// </summary>
private long _length;

/// <summary>
/// 要下载的文件的地址
/// </summary>
public string Url = "http://localhost/Downloader/test.rar";

/// <summary>
/// 获取文件大小
/// </summary>
private void GetFileSize()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.Url);
request.BeginGetResponse(result =>
{
HttpWebRequest req = (HttpWebRequest)result.AsyncState;
HttpWebResponse res = (HttpWebResponse)req.EndGetResponse(result);
this._length = res.ContentLength;
}, request);
}

private void BeginRequest()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.Url);
request.Headers["Range"] = "bytes=" + this._downloadedBytes + "-" + (this._downloadedBytes + _chunkSize - 1);
request.BeginGetResponse(new AsyncCallback(ResponseCallBack), request);
}

private void ResponseCallBack(IAsyncResult result)
{
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
//this._lenght = response.ContentLength;// 这里获取的大小为当前请求的块大小
int count = 0;
using (System.IO.Stream stream = response.GetResponseStream())
{
string savaName = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\test.rar";
System.IO.FileMode mode = this._downloadedBytes > 0 ? System.IO.FileMode.Append : System.IO.FileMode.CreateNew;
using (System.IO.FileStream fileStream = System.IO.File.Open(savaName, mode))
{
byte[] bytes = new byte[4096];
int read;
while ((read = stream.Read(bytes, 0, bytes.Length)) != 0)
{
fileStream.Write(bytes, 0, read);
count += read;
}


}
}
this._downloadedBytes += count;

if (_downloadedBytes < this._length)
{
this.BeginRequest();
}
}



我如何能获取服务器文件的总大小??如果我调用自己定义的GetFileSize方法获取的话,他貌似会把整个文件都一次下载下来,这样的话我分批下载就没意义了。。有什么办法获取到文件的总大小??请各大侠指点指点。。 Silverlight 断点续传 HttpWebRequest Range 服务器文件大小
[解决办法]
在你的GetFileSize方法中,设置 HttpWebRequest 的 Method 属性:


request.Method = "HEAD";

读书人网 >CAD教程

热点推荐