JSP連接遠程FTP服務器,生成縮略圖

          需求是這樣的:
          圖片文件放在遠程FTP服務器上,圖片是用作宣傳的,很大。用戶只能訪問web服務器,用戶需要在web上先預覽圖片的縮略圖,然后點擊鏈接下載該圖片。

          目前有兩種解決方案
          第一種方案,通過web服務器的jsp去連接ftp客戶端,讀取到遠程FTP服務器上的圖片,生成縮略圖,返回到頁面,然后用戶選擇想下載的圖片,再一次通過jsp連接ftp下載到客戶端。
          示例代碼如下:
          <%-- 
              Document   : img
              Created on : 
          2007-10-300:02:28
              Author     : autumn
          --%>

          <%@page contentType="text/html" pageEncoding="UTF-8"%>
          <%@ page import="java.awt.image.BufferedImage" %>
          <%@ page import="java.awt.*" %>
          <%@ page import="com.sun.image.codec.jpeg.*" %>
          <%@ page import="sun.net.ftp.FtpClient" %>
          <%@ page import="sun.net.TelnetInputStream" %>
          <%@ page import="java.io.ByteArrayOutputStream" %>
          <%
           
          String path 
          = request.getParameter("path");

          try {
            response.flushBuffer();
            out.clear();
            out 
          = pageContext.pushBody();
           
            out.clear();
            response.setContentType(
          "image/jpg");
            response.addHeader(
          "pragma","NO-cache");
            response.addHeader(
          "Cache-Control","no-cache");
            response.addDateHeader(
          "Expries",0);
            
            
          /*連接ftp服務器*/
            FtpClient fc 
          = new FtpClient();
            fc.openServer(
          "127.0.0.1");                 //連接ftp服務器,參數為ftp服務器地址
            fc.login("test""test");                   //登錄ftp服務器,參數為ftp用戶名密碼
            fc.binary();                                //轉成二進制模式
            TelnetInputStream bis = fc.get(path);      //獲取文件,返回輸入流
           
            BufferedImage image 
          = javax.imageio.ImageIO.read(bis);
            bis.close();                                
          //關閉輸入流
            fc.closeServer();                           //關閉服務器連接
            /*生成縮略圖*/
            
          float tag_w=80;
            
          float tag_h=60;
            
          int old_w=image.getWidth(null);        //得到源圖寬度
            int old_h=image.getHeight(null);       //得到源圖高度
            int new_w=0;                            //縮略圖的寬度
            int new_h=0;                            //縮略圖的高度
           
            
          float tempdouble;
            
          if(old_w>old_h){
              tempdouble
          =old_w/tag_w;
            }
          else{
              tempdouble
          =old_h/tag_h;
            }

            new_w
          =Math.round(old_w/tempdouble);  //計算縮略圖高度
            new_h=Math.round(old_h/tempdouble);  //計算縮略圖寬度
           
            BufferedImage tag 
          = new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);
            tag.getGraphics().drawImage(image,
          0,0,new_w,new_h,null);       //繪制縮小后的圖
           
            ServletOutputStream outStream 
          = response.getOutputStream();
            JPEGImageEncoder encoder 
          =JPEGCodec.createJPEGEncoder(outStream);
            encoder.encode(tag);
            outStream.close();
            response.reset();
          }
           catch (Exception ex) {
           
          //異常處理
          }

          %>

          <%-- 
              Document   : main
              Created 
          on : 2007-10-300:02:11
              Author     : autumn
          --
          %>

          <%@page contentType="text/html" pageEncoding="UTF-8"%>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
             "http://www.w3.org/TR/html4/loose.dtd"
          >

          <html>
              
          <head>
                  
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
                  
          <title>JSP Page</title>
              
          </head>
              
          <body>
                  
          <h3>FTP img tset</h3>
                  
          <img src="img.jsp?path=/2.jpg"/>
              
          </body>
          </html>

          上例只實現從遠程獲得圖片生成縮略圖返回,沒有實現遠程下載圖片,不過原理一樣。
          這個方案有一個缺點,就是生成縮略圖前,得從ftp服務器讀取大圖,速度比較慢。

          第二種解決方案是在遠程ftp服務器架設一個web server,兩個服務器共享文件目錄,把生成縮略圖的工作放在遠程,而傳回來的只是縮略圖,所以速度會快不少。

          posted on 2009-12-07 14:24 飛熊 閱讀(1402) 評論(0)  編輯  收藏 所屬分類: java

          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 高雄市| 天镇县| 荆州市| 常山县| 江山市| 庆阳市| 绥滨县| 思茅市| 娄烦县| 正蓝旗| 台前县| 偃师市| 新龙县| 阳西县| 武穴市| 栖霞市| 铜山县| 滦平县| 开远市| 邹平县| 赤峰市| 新晃| 柳江县| 岢岚县| 上思县| 平顺县| 怀集县| 万全县| 双牌县| 托里县| 龙口市| 宝兴县| 孟村| 辽阳市| 长寿区| 天气| 右玉县| 通榆县| 余姚市| 嫩江县| 依兰县|