首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

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

2013-06-25 
silverlight 如何获取服务器上的文件大小/// summary/// 文件块大小为4M( 如果文件总大小超过 _chunkSiz

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

热点排行