.NetMvc从http或本地下载pdf文件
1、帮助类
1 public static class PdfHelper 2 { 3 #region 从http链接下载 4 public static void Download(string url, string name, System.Web.Mvc.Controller controller) 5 { 6 var bytes = GetByteByRemoteURL(url); 7 controller.Response.Charset = "UTF-8"; 8 controller.Response.ContentType = "application/octet-stream"; 9 controller.Response.ContentEncoding = Encoding.Default; 10 controller.Response.AddHeader("Content-Disposition", "attachment; filename=" + name.Replace(" ", "") + ".pdf"); 11 controller.Response.BinaryWrite(bytes); 12 controller.Response.Flush(); 13 controller.Response.End(); 14 } 15 #endregion 16 17 #region 调用本地文件使用返回pdfbyte数组 18 19 /// <summary> 20 /// 调用本地文件使用返回pdfbyte数组 21 /// </summary> 22 /// <param name="srcPdfFile">‘D:\in2434341555551.pdf’</param> 23 /// <returns></returns> 24 25 public static byte[] GetSignaturePDFByte(string srcPdfFile) 26 { 27 using (FileStream fsRead = new FileStream(srcPdfFile, FileMode.Open, FileAccess.Read, FileShare.Read)) 28 { 29 int fsLen = (int)fsRead.Length; 30 byte[] hebyte = new byte[fsLen]; 31 fsRead.Read(hebyte, 0, hebyte.Length); 32 return hebyte; 33 } 34 } 35 36 #endregion 调用本地文件使用返回pdfbyte数组 37 38 #region 从网站上下载pdf,转化为字节流 39 /// <summary> 40 /// 从网站上下载pdf,转化为字节流 41 /// </summary> 42 /// <param name="srcPdfFile">文件地址:'https://******/group2/M00/00/04/wKj-mlpcoZ2IUbK5AACrpaV6k98AAAB6gAAAAAAAKu9562.pdf'</param> 43 44 /// <returns></returns> 45 public static Byte[] GetByteByRemoteURL(string srcPdfFile) 46 { 47 byte[] arraryByte; 48 HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(srcPdfFile); 49 req.Method = "GET"; 50 using (WebResponse wr = req.GetResponse()) 51 { 52 StreamReader responseStream = new StreamReader(wr.GetResponseStream(), Encoding.UTF8); 53 int length = (int)wr.ContentLength; 54 byte[] bs = new byte[length]; 55 56 HttpWebResponse response = wr as HttpWebResponse; 57 Stream stream = response.GetResponseStream(); 58 59 //读取到内存 60 MemoryStream stmMemory = new MemoryStream(); 61 byte[] buffer1 = new byte[length]; 62 int i; 63 //将字节逐个放入到Byte 中 64 while ((i = stream.Read(buffer1, 0, buffer1.Length)) > 0) 65 { 66 stmMemory.Write(buffer1, 0, i); 67 } 68 arraryByte = stmMemory.ToArray(); 69 stmMemory.Close(); 70 } 71 return arraryByte; 72 } 73 74 #endregion 从网站上下载pdf,转化为字节流 75 76 }
2、调用方法
1 public ActionResult Down() 2 { 3 PdfHelper.Download("http链接", "导出文件名字", this); 4 return new EmptyResult(); 5 }
3、前端使用
1 function Download() { 2 location.href = "/xx/down"; 3 }