542505989 发表于 2015-5-28 13:16:50

生成PDF下载 HTTP或FTP远程获取PDF

这个只是些代码片断。备用。希望也能对大家有用。

down.ashx.cs

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;

      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;

      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);
      }
    }
页: [1]
查看完整版本: 生成PDF下载 HTTP或FTP远程获取PDF