浏览器预览远程ftp图片
来源:互联网 发布:交行网络支付异地消费 编辑:程序博客网 时间:2024/06/05 08:03
需求:在网页上预览带密码的ftp服务器上的图片
最近遇到个需求,要在页面上显示ftp端的图片,但是不要下载到本地。
思路一:从后台传来图片路径,直接在img的src中写入ftp图片路径,发现不显示,百度后发现需要同时传入ftp的用户名和密码,写法如下:<img src="ftp://bill:BillSanMa1030@test.3mkj.com/test.jpg" />
尝试了一下,哇,显示出来了,so easy,但是在chrome访问,发现图片没有出现,控制台报错了,点开链接如下:
思路二:没办法,胳膊拧不过大腿,扛不过google,只能另寻出路,想到从服务端获取图片后,读取出来,转成Base64格式传到前台,
首先百度找到java从ftp获取文件的代码,网上多得很,再找到将图片转为Base64格式的代码,也是一搜一大把:
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.net.ftp.FTPFile;
FTPClient fc = new FTPClient();
// 连接ftp
// 连接ftp
fc.connect("test.3mkj.com", 21);
// 登录
// 登录
fc.login("bill", "BillSanMa1030");
// 设置编码格式
// 设置编码格式
fc.setControlEncoding("UTF-8");
String remoteAbsoluteFile = fs[0].getName();
remoteAbsoluteFile = new String(remoteAbsoluteFile.getBytes("UTF-8"), "ISO-8859-1");
// 获得输入流
// 获得输入流
InputStream in = fc.retrieveFileStream(remoteAbsoluteFile);
byte[] bytes = new byte[in.available()];
int length = in.read(bytes);
String base64Image = new String(Base64.encodeBase64(bytes));
但是,验证发现确实返回了一个Base64格式的字符串,但是却不是正确的图片转化,网上也找不到更详细的资料,仔细研究后发现in.available()比实际文件要小,查看FTPClient API发现retrieveFileStream的描述是“返回从其中一个指定的文件从服务器可以读取的InputStream。”也就是说可能返回的并不是完整文件的InputStream,继续查看API,发现有retrieveFile ( String remote, OutputStream local) (从服务器检索命名文件并将其写入给定的OutputStream。),尝试使用OutputStream ,于是把代码修改为:
FTPFile[] fs = fc.listFiles();
// 获得文件大小
int size = (int) fs[0].getSize();
byte[] bytes = new byte[size];
ByteArrayOutputStream os = new ByteArrayOutputStream();
// 写入输出流
fc.retrieveFile(remoteAbsoluteFile,os);
String base64Image = new String(Base64.encodeBase64(bytes));
但是,验证发现确实返回了一个Base64格式的字符串,但是却不是正确的图片转化,网上也找不到更详细的资料,仔细研究后发现in.available()比实际文件要小,查看FTPClient API发现retrieveFileStream的描述是“返回从其中一个指定的文件从服务器可以读取的InputStream。”也就是说可能返回的并不是完整文件的InputStream,继续查看API,发现有retrieveFile ( String remote, OutputStream local) (从服务器检索命名文件并将其写入给定的OutputStream。),尝试使用OutputStream ,于是把代码修改为:
FTPFile[] fs = fc.listFiles();
// 获得文件大小
int size = (int) fs[0].getSize();
byte[] bytes = new byte[size];
ByteArrayOutputStream os = new ByteArrayOutputStream();
// 写入输出流
fc.retrieveFile(remoteAbsoluteFile,os);
bytes = os.toByteArray();
String base64Image = new String(Base64.encodeBase64(bytes));
问题解决~以上!
String base64Image = new String(Base64.encodeBase64(bytes));
问题解决~以上!
阅读全文
0 0
- 浏览器预览远程ftp图片
- 浏览器图片预览
- 关于FTP远程和服务器通信建立连接、增加、删除、下载、预览图片功能
- 本地、远程图片上传预览
- IE7 浏览器预览本地图片
- 浏览器处理预览图片方法
- 带预览的图片浏览器
- 在浏览器中预览图片
- 在浏览器中预览图片
- 支持多浏览器的图片预览
- 本地上传图片预览 支持多种浏览器
- 上传图片预览一定要兼容所有浏览器
- 图片本地预览(兼容各种浏览器)
- 浏览器加载本地图片并预览
- 上传图片动态预览(兼容主流浏览器)
- js实现图片在浏览器进行预览
- 兼容各个浏览器的图片上传预览
- GridView--带预览的图片浏览器
- 今天为大家分享各个浏览器通用的QQ在线客服代码
- 统计学习方法 第4章 朴素贝叶斯法
- 三目运算符“?:”省略中间操作数
- 线上应用故障排查之一:高CPU占用
- OPC服务器与实时数据库缓存通信
- 浏览器预览远程ftp图片
- 如何将域名转换为ip
- 面向对象(二)
- 数据库操作
- java 在线查看本地pdf文档或者图片
- 数据结构实验之图论六:村村通公路
- ModelMap和ModelAndView的作用
- 一级购物车demo
- C++ 操作64位系统,默认读取Wow6432Node子键的解决方法。