生成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[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);
      }

    }



posted @ 2008-03-04 12:22  LeoXu  阅读(952)  评论(0编辑  收藏  举报
阿里云服务器购买页