ftp图片服务器搭建!ftp上传到图片服务器,通过http协议读取图片
现在在搞图片服务器,需求是
1.用户上传的图片不能直接上传到应用服务器,而且要上传到另外一太专门的服务器上去,目的是为了实现负载和共享,
2.从图片服务器上读取图片
解决思路:
思路一,用ftp上传,用ftp下载
思路二,用ftp上传,用http下载[图片服务器装一个web容器。如tomcat]
考虑到下载时如果用ftp,因为存在鉴权操作,而且每次都要建立新链接并断开谅解,这样效率很低,所以决定用思路二:
开始动手
远程操作数据,网上好多人说有两种方式:1,用sun提供的ftpClient 2.用apache提供的开源组件
我这里选择了sun的jdk自带的ftpClient.
遇到的问题:1,刚开始我用的jdk7,结果发现sun的类识别调用报错,经查是因为jdk7对net包下的ftpClient做个修改,所以有的api不能用,
解决办法:果断换回jdk6编译。问题解决
2.上传完成后发现中文的文件名都变成了乱码。经查是因为sun默认进行了编码is08859-1;
解决办法:自己写个类 MyFtpClient 继承FtpClient即可,只有个方法用来设置转码,一般设置为GBk即可。代码下面附
3.中文总算顺利传上去,本地用servlet调用http://来访问传上去的图片,结果发现只要文件名有中文的文件,无论是用浏览器地址栏访问还是在servlete后台
String urlString = "http://10.10.110.112:8080/fdc-report-MySQL"+"/"+path+"/"+temp2;
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
InputStream bis = conn.getInputStream();
都访问不了:
解决办法“:tomcat默认不知道中文访问,所以对tomcat进行设置,让中文路径也可以访问:
在Tomcat安装目录下找到server.xml文件,找到
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
在里面加入URIEncoding="utf-8" 这个属性,保存,然后重启tomcat即可。
4.上传的文件名字中有空格,tomcat也访问不了:原因是:路径中空格要进行转换。空格被转码成'+'了,而在tomcat服务器中,空格是'%20',所以会导致无法访问到该路径
解决办法:
String filename = "QQ截 图20130802091756.png";
String temp1=URLEncoder.encode(filename, "UTF-8");
String temp2=temp1.replaceAll("\\+", "%20");
String urlString = "http://10.10.110.112:8080/fdc-report-mysql"+"/"+path+"/"+temp2;
URL url = new URL(urlString);
到此问题基本解决 .
遇到问题就要内心解决,一定可以搞定。加油!!!
下面给大家附上代码: