1.分块下载文件代码
/// <summary> /// 下载文件 /// </summary> /// <param name="url">文件url</param> /// <param name="docName"></param> /// <returns></returns> public string DownFileByUrl(string url,string docName) { //url 如: http://www.xxx.com:888/UpFiles/1111.txt string serverpath = System.AppDomain.CurrentDomain.BaseDirectory + "UpFiles\\BPMDown"; if (!Directory.Exists(serverpath)) Directory.CreateDirectory(serverpath); string filePath = serverpath + "\\" + docName; if (File.Exists(filePath)) {//如果已经存在,则删除 try { File.Delete(filePath); } catch (Exception) { } } using (FileStream fss = new FileStream(filePath, FileMode.Create)) { HttpTrunkDownLoad(fss, url); } //HttpDownLoad(filePath, url, docName); return "\\UpFiles\\Down\\" + docName; } /// <summary> /// 分块下载文件 /// </summary> /// <param name="fs"></param> /// <param name="reqUrl"></param> public void HttpTrunkDownLoad(FileStream fs ,string reqUrl ) { try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(reqUrl); request.Method = "GET"; request.ProtocolVersion = new Version(1, 1); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); if (response.StatusCode == HttpStatusCode.NotFound) { throw new Exception("该文件在BPM服务器上不存在!");//找不到 } // 获取返回的数据 Stream res = response.GetResponseStream(); long length = response.ContentLength; long readCnt = 0; long readLength = 0; int trunksize = 5 * 1024 * 1024; //分块下载,每块的大小 while (readCnt != length) { byte[] bytes = new byte[trunksize]; readLength = res.Read(bytes, 0, trunksize); readCnt = readCnt + readLength; fs.Write(bytes, 0, (int)readLength); } } catch (Exception ex) { fs.Close(); fs.Dispose(); throw ex; } }
2.不块下载
//下载文件 public void HttpDownLoad(string filePath,string url,string docName) { HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest; request.Method = "GET"; request.ProtocolVersion = new Version(1, 1); HttpWebResponse response = request.GetResponse() as HttpWebResponse; if (response.StatusCode == HttpStatusCode.NotFound) { throw new Exception("该文件在BPM服务器上不存在!");///找不到则直接返回null } // 转换为byte类型 System.IO.Stream stream = response.GetResponseStream(); //创建本地文件写入流 Stream fs = new FileStream(filePath, FileMode.Create); byte[] bArr = new byte[1024]; int size = stream.Read(bArr, 0, (int)bArr.Length); while (size > 0) { fs.Write(bArr, 0, size); size = stream.Read(bArr, 0, (int)bArr.Length); } fs.Close(); stream.Close(); }