zoukankan      html  css  js  c++  java
  • WebClient HttpWebRequest 下载文件到本地

     

    处理方式:

    第一种:  我们需要获取文件,但是我们不需要保存源文件的名称

            public void DownFile(string uRLAddress, string localPath, string filename)
            {
                WebClient client = new WebClient();
                Stream str = client.OpenRead(uRLAddress);
                StreamReader reader = new StreamReader(str);
                byte[] mbyte = new byte[1000000];
                int allmybyte = (int)mbyte.Length;
                int startmbyte = 0;
    
                while (allmybyte > 0)
                {
    
                    int m = str.Read(mbyte, startmbyte, allmybyte);
                    if (m == 0)
                    {
                        break;
                    }
                    startmbyte += m;
                    allmybyte -= m;
                }
    
                reader.Dispose();
                str.Dispose();
    
                //string paths = localPath + System.IO.Path.GetFileName(uRLAddress);
                string path = localPath + filename;
                FileStream fstr = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
                fstr.Write(mbyte, 0, startmbyte);
                fstr.Flush();
                fstr.Close();
            }
    

      

    第二种:我们需要获取文件,但是希望可以获取到文件的原名称以及其他的信息

        /// <summary>
           /// 文件下载
           /// </summary>
           /// <param name="url">所下载的路径</param>
           /// <param name="path">本地保存的路径</param>
            /// <param name="overwrite">当本地路径存在同名文件时是否覆盖</param>
            /// <param name="callback">实时状态回掉函数</param>
            /// Action<文件名,文件的二进制, 文件大小, 当前已上传大小>
           public static void HttpDownloadFile(string url, string path, bool overwrite, Action<string,string, byte[], long, long> callback = null)
            {
                // 设置参数
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                //发送请求并获取相应回应数据
                HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                //获取文件名
                string fileName = response.Headers["Content-Disposition"];//attachment;filename=FileName.txt
                string contentType = response.Headers["Content-Type"];//attachment;
               
                if (string.IsNullOrEmpty(fileName))
                    fileName = response.ResponseUri.Segments[response.ResponseUri.Segments.Length - 1];
                else
                    fileName = fileName.Remove(0, fileName.IndexOf("filename=") + 9);
                //直到request.GetResponse()程序才开始向目标网页发送Post请求
                using (Stream responseStream = response.GetResponseStream())
                {
                    long totalLength = response.ContentLength;
                    ///文件byte形式
                    byte[] b = ImageHelper.ImageToByte1(url);
                    //创建本地文件写入流
                    if (System.IO.File.Exists(Path.Combine(path, fileName))) {
                        fileName = DateTime.Now.Ticks + fileName;
                    }
                    using (Stream stream = new FileStream(Path.Combine(path, fileName), overwrite ? FileMode.Create : FileMode.CreateNew))
                    {
                        byte[] bArr = new byte[1024];
                        int size;
                        while ((size = responseStream.Read(bArr, 0, bArr.Length)) > 0)
                        {
                            stream.Write(bArr, 0, size);
                            callback.Invoke(fileName,contentType, b, totalLength, stream.Length);
                        }
                    }
                }
            }
    

    但是这并不是绝对的,第一种方法当地址是    :  

    http://128.1.3.67:8083/api/wap/v2/fs/image/d4cbc75704ece271a5e0f1765346587f.jpg 时我们一样可以获取到名称 
     
     使用:System.IO.Path.GetFileName(uRLAddress)


  • 相关阅读:
    poj 2728 Desert King
    uva 439 Knight Moves
    hdu 1875 畅通工程再续
    scau实验题 8600 骑士周游问题(有障碍物)
    scau实验题 8596 Longest Ordered Subsequence
    poj 1679 The Unique MST
    uva 527 Oil Deposits
    poj 2533 Longest Ordered Subsequence
    .net 程序员 java 开发入门
    Collation conflict occur at operation on User define funtion & table's column
  • 原文地址:https://www.cnblogs.com/myloveblogs/p/7754656.html
Copyright © 2011-2022 走看看