【IT168技术文档】
public void ProcessRequest(HttpContext context) { string title = sui.Title; string su = sui.SourceUrl; //全文下载链接地址 context.Response.Clear(); context.Response.ContentType = "application/pdf"; context.Response.ContentEncoding = Encoding.UTF8; context.Response.Charset = "utf-8"; context.Response.AddHeader("Content-Disposition", "attachment; filename=" +HttpUtility.UrlEncode(title+".pdf",Encoding.UTF8)); if (su.Contains("ftp")) { string userName = ""; string password = ""; FtpDownload(context, su, userName, password); } else { HttpDownload(context, su); } } private static void FtpDownload(HttpContext context, string fileUrl, string userName, string password) { try { byte[] result; byte[] buffer = new byte[4096]; Uri filepath = new Uri(fileUrl); FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(filepath); reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; reqFTP.UseBinary = true; reqFTP.Credentials = new NetworkCredential(userName, password); using (FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse()) { using (Stream responseStream = response.GetResponseStream()) { using (MemoryStream memoryStream = new MemoryStream()) { int count = 0; do { count = responseStream.Read(buffer, 0, buffer.Length); memoryStream.Write(buffer, 0, count); } while (count != 0); result = memoryStream.ToArray(); HttpContext.Current.Response.AddHeader("Content-Length", result.Length.ToString()); memoryStream.WriteTo(context.Response.OutputStream); memoryStream.Close(); context.Response.OutputStream.Flush(); context.Response.Flush(); } } } } catch (Exception ex) { Exceptions.LogException(ex); } } private static void HttpDownload(HttpContext context, string httpUrl) { try { byte[] buffer = new byte[4096]; HttpWebRequest reqHTTP = (HttpWebRequest)WebRequest.Create(httpUrl); using (HttpWebResponse response = (HttpWebResponse)reqHTTP.GetResponse()) { using (Stream responseStream = response.GetResponseStream()) { using (MemoryStream memoryStream = new MemoryStream()) { int count = 0; do { count = responseStream.Read(buffer, 0, buffer.Length); memoryStream.Write(buffer, 0, count); } while (count != 0); byte[] result = memoryStream.ToArray(); HttpContext.Current.Response.AddHeader("Content-Length", result.Length.ToString()); memoryStream.WriteTo(context.Response.OutputStream); memoryStream.Close(); context.Response.OutputStream.Flush(); context.Response.Flush(); } } } } catch (Exception ex) { Exceptions.LogException(ex); } }