風☆小贤‘s 烂笔头

好记性,不如烂笔头……

跨服务器下载文档资源

        如何实现跨服务器下载文件呢?其实思路很简单,可以使用WebClient对象,将指定的文件从存储资源的服务器上下载一个副本到本地服务器,

再将本地的副本传输给请求的客户端。

下面上代码:

    /// <summary>
    /// 下载
    /// </summary>
    protected void DownLoadRecordFile()
    {
        //文件路径
        string strPath = ConfigurationManager.AppSettings["filesource"].ToString() + Request.QueryString["FleNm"];

        if (strPath.Length > 0)
        {
            string filename = strPath.Substring(strPath.LastIndexOf(@"/") + 1);
            Page.Response.Clear();
            ResFile(strPath, filename);
        }
        else
        {
            Response.Write("没有可下载的文件![<a href='javascript:window.close();'>关闭窗口</a>]");
        }
        Page.Response.End();
    }
    /// <summary>
    /// 下载文件
    /// </summary>
    /// <param name="path"></param>
    /// <param name="fileName"></param>
    private void ResFile(string path, string fileName)
    {
        System.Uri remoteUri = new Uri(path);
        //本地下载路径地址        
        string localurl = Server.MapPath("~/Document/" + fileName);
        System.Net.WebClient myWebClient = new System.Net.WebClient();
        FileInfo file = new FileInfo(localurl);
        try
        {
            //判断本地路径下是否已存在(已有人查看下载过)          
            if (!(File.Exists(file.ToString())))
            {                
                myWebClient.DownloadFileCompleted += (s, e) =>
                {
                    //以流形式将本地对远程的副本输出        
                    FileInfo fileinfo = new FileInfo(localurl);
                    Response.Clear();
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8).Replace("+", "20%"));
                    Response.AddHeader("Content-Length", file.Length.ToString());
                    Response.ContentType = "application/octet-stream";
                    Response.WriteFile(file.FullName);
                    Response.Flush();
                    Response.End();
                };
                myWebClient.DownloadFileAsync(remoteUri, localurl);
            }
            else
            {
                //以流形式将本地对远程的副本输出        
                FileInfo fileinfo = new FileInfo(localurl);
                Response.Clear();
                Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8).Replace("+", "20%"));
                Response.AddHeader("Content-Length", file.Length.ToString());
                Response.ContentType = "application/octet-stream";
                Response.WriteFile(file.FullName);
                Response.Flush();
                Response.End();
            }
        }
        catch { }
    }



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/li_fighting/article/details/9816475
文章标签: C# 文档
个人分类: C#
想对作者说点什么? 我来说一句

IDM下载工具

2018年01月07日 3.9MB 下载

SFTP下载(JSch可跨服务器

2014年06月18日 6.34MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭