JSP連接遠程FTP服務(wù)器,生成縮略圖

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

          目前有兩種解決方案
          第一種方案,通過web服務(wù)器的jsp去連接ftp客戶端,讀取到遠程FTP服務(wù)器上的圖片,生成縮略圖,返回到頁面,然后用戶選擇想下載的圖片,再一次通過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服務(wù)器*/
            FtpClient fc 
          = new FtpClient();
            fc.openServer(
          "127.0.0.1");                 //連接ftp服務(wù)器,參數(shù)為ftp服務(wù)器地址
            fc.login("test""test");                   //登錄ftp服務(wù)器,參數(shù)為ftp用戶名密碼
            fc.binary();                                //轉(zhuǎn)成二進制模式
            TelnetInputStream bis = fc.get(path);      //獲取文件,返回輸入流
           
            BufferedImage image 
          = javax.imageio.ImageIO.read(bis);
            bis.close();                                
          //關(guān)閉輸入流
            fc.closeServer();                           //關(guān)閉服務(wù)器連接
            /*生成縮略圖*/
            
          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>

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

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

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

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

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 石河子市| 平果县| 深州市| 张家口市| 奉新县| 平定县| 门源| 寻甸| 扬中市| 高州市| 晋宁县| 门头沟区| 古交市| 龙海市| 乌拉特前旗| 周口市| 铜梁县| 东方市| 南城县| 原阳县| 安远县| 苏尼特右旗| 将乐县| 昔阳县| 巫溪县| 平舆县| 天祝| 仁怀市| 盐城市| 墨脱县| 淮滨县| 霸州市| 江津市| 敖汉旗| 天全县| 盐池县| 隆林| 佳木斯市| 美姑县| 越西县| 镇远县|