用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
AutumnHealth的公告
<script type="text/javascript"> var today = new Date().getDate(); var month = new Date().getMonth()+1; var release = 3; var days = release - today; if (month == 11) days = 30+release-today; if (month == 12) days = release - today; if (days < 0) days = 0; var base = 'http://www.netbeans.org'; document.write('<div style="width:160px;font-family:sans-serif" align="center"><a href="http://www.netbeans.org"><img id="countdownimage" src="http://www.netbeans.org/images/v6/nb-logo-frontpage.gif" width="180px" height="39px" border="0" alt="Netbeans 6.0 - Released!"></a><br/><a href="http://www.netbeans.org" style="font-size:7pt;color:#DBBA75;text-decoration: none">Netbeans 6.0 -Released!</a></div>'); </script> <noscript><img id="countdownimage" src="http://www.netbeans.org/images/v6/nb-logo-frontpage.gif" width="160" height="80" alt="Netbeans 6.0 - Released!"></noscript> <!-- 天气预报 --> <font color="lightblue" size="4"><b>&lt&lt 天气预报&gt&gt</b></font><br> <iframe src="http://weather.265.com/weather.htm" width="168" height="50" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" name="265"></iframe> <!-- 农历日历 --> <script language="JavaScript"> <!-- var bsYear; var bsDate; var bsWeek; var arrLen=8; //数组长度 var sValue=0; //当年的秒数 var dayiy=0; //当年第几天 var miy=0; //月份的下标 var iyear=0; //年份标记 var dayim=0; //当月第几天 var spd=86400; //每天的秒数 var year1999="30;29;29;30;29;29;30;29;30;30;30;29"; //354 var year2000="30;30;29;29;30;29;29;30;29;30;30;29"; //354 var year2001="30;30;29;30;29;30;29;29;30;29;30;29;30"; //384 var year2002="30;30;29;30;29;30;29;29;30;29;30;29"; //354 var year2003="30;30;29;30;30;29;30;29;29;30;29;30"; //355 var year2004="29;30;29;30;30;29;30;29;30;29;30;29;30"; //384 var year2005="29;30;29;30;29;30;30;29;30;29;30;29"; //354 var year2006="30;29;30;29;30;30;29;29;30;30;29;29;30"; var month1999="正月;二月;三月;四月;五月;六月;七月;八月;九月;十月;十一月;十二月" var month2001="正月;二月;三月;四月;闰四月;五月;六月;七月;八月;九月;十月;十一月;十二月" var month2004="正月;二月;闰二月;三月;四月;五月;六月;七月;八月;九月;十月;十一月;十二月" var month2006="正月;二月;三月;四月;五月;六月;七月;闰七月;八月;九月;十月;十一月;十二月" var Dn="初一;初二;初三;初四;初五;初六;初七;初八;初九;初十;十一;十二;十三;十四;十五;十六;十七;十八;十九;二十;廿一;廿二;廿三;廿四;廿五;廿六;廿七;廿八;廿九;三十"; var Ys=new Array(arrLen); Ys[0]=919094400;Ys[1]=949680000;Ys[2]=980265600; Ys[3]=1013443200;Ys[4]=1044028800;Ys[5]=1074700800; Ys[6]=1107878400;Ys[7]=1138464000; var Yn=new Array(arrLen); //农历年的名称 Yn[0]="己卯年";Yn[1]="庚辰年";Yn[2]="辛巳年"; Yn[3]="壬午年";Yn[4]="癸未年";Yn[5]="甲申年"; Yn[6]="乙酉年";Yn[7]="丙戌年"; var D=new Date(); var yy=D.getFullYear(); var mm=D.getMonth()+1; var dd=D.getDate(); var ww=D.getDay(); if (ww==0) ww="<font color=RED>星期日"; if (ww==1) ww="星期一"; if (ww==2) ww="星期二"; if (ww==3) ww="星期三"; if (ww==4) ww="星期四"; if (ww==5) ww="星期五"; if (ww==6) ww="<font color=RED>星期六"; ww=ww; var ss=parseInt(D.getTime() / 1000); if (yy<100) yy="19"+yy; for (i=0;i<arrLen;i++) if (ss>=Ys[i]){ iyear=i; sValue=ss-Ys[i]; //当年的秒数 } dayiy=parseInt(sValue/spd)+1; //当年的天数 var dpm=year1999; if (iyear==1) dpm=year2000; if (iyear==2) dpm=year2001; if (iyear==3) dpm=year2002; if (iyear==4) dpm=year2003; if (iyear==5) dpm=year2004; if (iyear==6) dpm=year2005; if (iyear==7) dpm=year2006; dpm=dpm.split(";"); var Mn=month1999; if (iyear==2) Mn=month2001; if (iyear==5) Mn=month2004; if (iyear==7) Mn=month2006; Mn=Mn.split(";"); var Dn="初一;初二;初三;初四;初五;初六;初七;初八;初九;初十;十一;十二;十三;十四;十五;十六;十七;十八;十九;二十;廿一;廿二;廿三;廿四;廿五;廿六;廿七;廿八;廿九;三十"; Dn=Dn.split(";"); dayim=dayiy; var total=new Array(13); total[0]=parseInt(dpm[0]); for (i=1;i<dpm.length-1;i++) total[i]=parseInt(dpm[i])+total[i-1]; for (i=dpm.length-1;i>0;i--) if (dayim>total[i-1]){ dayim=dayim-total[i-1]; miy=i; } bsWeek=ww; bsDate=yy+"年"+mm+"月"; bsDate2=dd; bsYear="农历"+Yn[iyear]; bsYear2=Mn[miy]+Dn[dayim-1]; if (ss>=Ys[7]||ss<Ys[0]) bsYear=Yn[7]; function CAL(){ document.write("<table border='1' cellspacing='3' width='90%' bordercolor='#000000' bgcolor='#EFFBEF' height='110' cellpadding='2'"); document.write("<tr><td align='center'><b><font color=#008040>"+bsDate+"</font><br><font face='Arial' size='6' color=#000000>"+bsDate2+"</font><br><font color=#008040><span style='FONT-SIZE: 10.5pt'>"); document.write(bsWeek+"</span><br>"+"</b><font color=#9B4E00>"); document.write(bsYear+"<br>"+bsYear2+"</td></tr></table>"); } //--> </script> <script language="javascript">CAL();</script>
文章分类
GNU/Linux
Linux桌面中文网
Ubuntu中文论坛
Java站点
J2ME开发网
Java中文博览
Java开源大全
Java视线
JR - 汇聚技术精英,增进技术交流
Netbeans中文社区(RSS)
Sun 中国技术社区
朋友的Blog
allentranks的专栏(RSS)
Ammi的Blog(RSS)
AutumnHealth's blog--my blog for GNU/Linux(RSS)
丹丹的blog
金狗玖度(RSS)
长空阁(RSS)
存档

原创  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,两个服务器共享文件目录,把生成缩略图的工作放在远程,而传回来的只是缩略图,所以速度会快不少。
目前打算采用第二种方案 : )

发表于 @ 2007年10月31日 23:48:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:Ubuntu 7.10 Gutsy Gibbon发布倒计时 | 新一篇:[转贴]jsp下载文件的实现方法

  • 发表评论
  • 评论内容:
  •  
Copyright © AutumnHealth
Powered by CSDN Blog