ajax读取图片字节流后在指定路径还原输出

变程编成 2014-07-11 12:42:26
大家好,最近遇到一个挺难的问题,通过Ajax发送Post请求,从服务器读取图片后,通过response的输出流输出,虽然已经正确地获取了图片,也已获得了输出流,但是在通过Ajax展示的时候没能正确的展现,望各位指点迷津。以下是相关的代码。
Java部分

OutputStream outstr = response.getOutputStream();
BufferedOutputStream bufferOut = new BufferedOutputStream(outstr);

InputStream inStr = dao.readFile(savePath + imagePath, 0);
BufferedInputStream bufferIn = new BufferedInputStream(inStr);

byte[] buffer = new byte[4096];
int size = bufferIn.read(buffer);
while(size != -1){
bufferOut.write(buffer, 0, size);
size = bufferIn.read(buffer);
}
System.out.println("read files pass");
bufferIn.close();
bufferOut.flush();
bufferOut.close();


Ajax部分

function showImages(){
var filePath = $("#imagePath").val();
$.ajax({type: "post", //使用post方法访问后台
dataType: "text", //返回text格式的数据,(这里存在疑问,Java部分是response输出流,这里应该指定什么样的数据类型)
url: http+"select.pic", //要访问的后台地址,这里是servlet的地址
data:{"filePath":filePath}, //要发送的数据
success: function(data){//data为返回的数据,在这里做数据绑定
$("#images").attr("src", "data:image/gif;base64," + data);
alert("complete!");
});
}
...全文
4191 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangjun5159 2016-01-09
  • 打赏
  • 举报
回复
楼主的问题,应该是没有对流进行base64编码,所以图片显示不正常。
wangjun5159 2016-01-09
  • 打赏
  • 举报
回复
引用 10 楼 zhoukailovec 的回复:
虽然你自己找到问题了,不过我还是啰嗦一下 1、4096字节长度完全可以用InputStream获取其长度,固定数字限制太大 2、字节流切记转换为Base64的字符流供页面前端显示
你的说法是错误的。在流没有读完之前,无法获取长度。所以,只能指定缓冲区大小。InputStream的api也没有获取长度的方法
落曳声痕 2015-12-18
  • 打赏
  • 举报
回复
虽然你自己找到问题了,不过我还是啰嗦一下 1、4096字节长度完全可以用InputStream获取其长度,固定数字限制太大 2、字节流切记转换为Base64的字符流供页面前端显示
wangjun5159 2015-09-23
  • 打赏
  • 举报
回复
我找到问题原因了。哈哈
wangjun5159 2015-09-17
  • 打赏
  • 举报
回复
楼主,这个问题解决了吗?能说一下解决思路吗?我也遇到这个问题了。
xuzuning 2014-07-11
  • 打赏
  • 举报
回复
当然能跑的通! 我似乎并没有理由跑到这里来忽悠你吧? 既然是 data:image/gif;base64, 那么 data 就一定要是 base64 编码的了 java 比 php 强大的多,不至于这点小事也做不到吧
变程编成 2014-07-11
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
我已经说过了“我对java不熟悉”,所以有些问题需要你自己敲定 System.out.println("read files pass"); 只是在调试时输出到控制台吗?却对不会输出到客户端? 我对 php 很精通,这是我刚才做的测试
<?php
if($_POST) {
  echo base64_encode(file_get_contents('../'.$_POST['img'])); //读取图片数据并作base64编码
  exit;
}
?>
<img id='images' src=''>
<script src=/scripts/jquery-1.8.3.min.js></script>
<script>
$(function() {
  $.post('<?=$_SERVER['PHP_SELF']?>', {img:'03.gif'}, function(data) {
    $("#images").attr("src", "data:image/gif;base64," + data);
  });
});
</script>
虽然语言不同,但是原理是一样的
是否跑得通?
xuzuning 2014-07-11
  • 打赏
  • 举报
回复
我已经说过了“我对java不熟悉”,所以有些问题需要你自己敲定 System.out.println("read files pass"); 只是在调试时输出到控制台吗?却对不会输出到客户端? 我对 php 很精通,这是我刚才做的测试
<?php
if($_POST) {
  echo base64_encode(file_get_contents('../'.$_POST['img'])); //读取图片数据并作base64编码
  exit;
}
?>
<img id='images' src=''>
<script src=/scripts/jquery-1.8.3.min.js></script>
<script>
$(function() {
  $.post('<?=$_SERVER['PHP_SELF']?>', {img:'03.gif'}, function(data) {
    $("#images").attr("src", "data:image/gif;base64," + data);
  });
});
</script>
虽然语言不同,但是原理是一样的
变程编成 2014-07-11
  • 打赏
  • 举报
回复
引用 2 楼 rui888 的回复:
参考这个要刷新
“记得servlet生成的图片要记浏览器不得缓存,”这个是什么意思?兄台看的懂?修改的URL应该是怎么样的?
变程编成 2014-07-11
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
由 $("#images").attr("src", "data:image/gif;base64," + data); 可知 data 应该是 base64 编码后的数据 所以 dataType: "text" 是正确的 对 java 不是很熟悉,但 bufferOut.write(buffer, 0, size); 显然是直接输出了图片数据,那么 base64 编码在哪里进行呢? System.out.println("read files pass"); 又把一个字符串附加在输出中,这难道不会影响到图片的解析吗?
bufferOut.writer(buffer, 0, size)中包装的是response的输出流,如果不是通过输出来显示,那应该怎么做呢? System.out.println("read files pass")是系统的输出,是我用来作测试的,看看代码是否执行到,应该和response的输出流没有关系的吧?仁兄不能只提问题,不提解决方法啊,高见~
tony4geek 2014-07-11
  • 打赏
  • 举报
回复
xuzuning 2014-07-11
  • 打赏
  • 举报
回复
由 $("#images").attr("src", "data:image/gif;base64," + data); 可知 data 应该是 base64 编码后的数据 所以 dataType: "text" 是正确的 对 java 不是很熟悉,但 bufferOut.write(buffer, 0, size); 显然是直接输出了图片数据,那么 base64 编码在哪里进行呢? System.out.println("read files pass"); 又把一个字符串附加在输出中,这难道不会影响到图片的解析吗?
目录 一、 HTML&CSS部分 11 1、HTML中定义表格的宽度用80px和80%的区别是什么? 11 2、CSS样式定义优先级顺序是? 12 3、div和span的区别? 12 4、CSS选择器包括? 12 5、用css3语法中,如何实现一个矩形框的圆角效果和50%红色透明效果?,请写出关键脚本 12 6、Div与Table的区别 13 7、行级标签转块级标签,块级标签转行级标签 13 二、Java基础部分 13 1、java中有哪些基本类型? 13 2、java为什么能够跨平台运行? 13 3、String是基本数据类型吗?我可不可以写个类继承于String? 14 4、谈谈&和&&的区别? 14 5、Switch语句里面的条件可不可以是byte、long、String?使用时候还应注意什么? 14 6、short s1=1;s1=s1+1;有什么错?short s1 = 1;s1+=1 有什么错? 14 7、char为什么能存贮一个汉字? 15 9、final关键字的用法? 15 10、静态变量和实例变量的区别? 15 11、面向对象的基本特征是什么? 15 12、作用域public,private,protected,以及不写时的区别? 16 13、Overload和Override的区别。 16 14、构造器可不可以被重载或重写? 16 15、Java中有没有多继承? 16 16、抽象类和接口的区别? 17 17、java中实现多态的机制是什么? 17 19、String和StringBuffer的区别?StringBuffer和StringBuilder区别? 17 21、数组中有没有length()方法,String中有没有length()方法? 18 23、final, finally, finalize的区别。 18 24、‘==’和equals的区别? 18 25、JAVA中Object类中有哪些常用方法? 19 26、heap和stack有什么区别。 19 27、GC是什么? 为什么要有GC? 20 28、什么是内部类?分为哪几种? 20 29、为什么需要内部类? 20 30、内部类可以引用它的包含类的成员吗?有没有什么限制? 21 31、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 33、数字转字符有多少种方式,分别是什么 22 34、Java创建对象有几种方式 22 35、写出验证Email的正则表达式 22 39、说出十种常见的异常 22 40什么是检查性异常和非检查性异常? 23 41、Java的异常处理机制是什么? 23 42、一个静态方法,里面可不可以用this和super关键字 24 三、JavaScript/JQuery/Ajax部分 24 1、用js和jQuery怎么进行表单验证 24 3、列举javaScript的3种主要数据类型,2种复合数据类型和2种特殊数据类型。 24 4、谈谈你的JS的理解? 24 5、ajax的优点? 25 6、简述一下ajax调试代码查找错误的方法? 26 7、简述ajax中Js脚本缓存问题该如何解决? 26 8、同步和异步怎么理解?分别在什么情况下使用。 26 9、java后台如何接收ajax数据? 26 10、为什么要有jquery? 26 11、jQuery选择器有多少种? 27 13、你是如何使用jquery中的ajax的? 27 14、jquery中的$.get和$.post请求区别? 27 15、jquery中如何操作样式的? 28 16、如何设置和获取HTML和文本的值? 28 17、Jquery能做些什么? 28 18、在ajax中data主要有哪几种? 28 19、jQuery中ajax由几部分组成? 28 20、js和jQuery获取value值得区别 29 四、jsp/servlet部分 29 1、Tomcat的优化经验 29 2、Tomcat根目录下有哪些文件 31 3、什么是TOMCAT,怎样启动停止,配置文件,日志文件的存储。 31 4、解释一下什么是servlet;什么是servlet容器; 32 5、说一说Servlet的生命周期,执行过程? 32 6、实例化servlet有几种方式 32 7、谈谈你对http协议的理解 33 8、HTTP请求的GET与POST方式的区别 34 9、forward 和redirect的区别? 34 10、servlet中怎么定义forward 和redirect 35 11、过滤器有哪些作用? 35 12、JSP的常用指令? 35 13、JSP和Servlet中的请求转发分别如何实现? 35 14、JSP乱码如何解决? 36 15、session 和 application的区别? 36 16、jsp有哪些内置对象?作用分别是什么? 36 17、Jsp有哪些动作?作用分别是什么? 37 18、JSP中动态INCLUDE与静态INCLUDE的区别? 37 19、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 38 20、页面传递对象的方法? 38 21、Cookied和session区别? 38 22、Filter的生命周期与执行过程 38 23、Tomcat系统内存怎么配置 39 24、JSTL标签库包含哪些? 39 五、数据库部分 40 1、触发器的作用? 40 2、什么是存储过程?用什么来调用? 40 3、存储过程的优缺点? 40 4、存储过程与函数的区别 41 5、索引的作用?和它的优点缺点是什么? 41 6、什么样的字段适合建索引 41 7、索引类型有哪些? 42 8、什么是事务?什么是锁? 42 9、什么叫视图?游标是什么? 43 10、视图的优缺点 43 11、列举几种表连接方式,有什么区别? 43 12、主键和外键的区别? 44 13、在数据库中查询语句速度很慢,如何优化? 44 14、数据库三范式是什么? 44 15、union和union all有什么不同? 45 16、char、varchar2、varchar有什么区别? 45 17、Oracle和Mysql的区别? 46 18、Oracle语句有多少类型 46 19、oracle分页语句 47 20、从数据库中随机取50条 47 21、order by与group by的区别 47 22、commit在哪里会运用 47 23、行转列、列换行怎么转 48 24、什么是PL/SQL? 49 25、序列的作用 50 26、表和视图的关系 50 27、oracle基本数据类型 50 28、drop、truncate、 delete区别 50 29、如何优化大数据量的访问? 51 30、oracle怎么去除去重 51 31、合并查询有哪些? 51 32、SQL语句执行顺序 51 33、null的含义 52 34、mysql分页 52 35、MySQL、SqlServer、oracle写出字符存储、字符串转时间 52 36、update语句可以修改结果集中的数据吗? 53 37、oracle如何设置主键自动增长? 53 38、表连接、子查询的区别是什么?它们可以相互转化吗?你倾向于用哪种,为什么? 54 39、oracle数据库表的备份及还原 54 40、谈谈你知道的数据库和中间件 54 41、oracle和MySQL的区别 54 42、简述Mysql的InnoDb 55 43、删除重复数据只保留一条。 55 44、一个几千万数据,发现数据查询很慢,怎么办? 55 六、Java高级部分 56 1、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 56 2、sleep() 和 wait() 有什么区别? 56 3、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 56 4、线程的基本概念 57 5、什么是多线程 57 6、程序、进程、线程之间的关系 57 7、创建线程有几种方式,分别是什么? 58 8、线程的生命周期 59 9、线程currentThread()与interrupt()方法的使用 59 10、线程状态 59 启动线程的方式?start or run? 59 11、什么是java序列化,如何实现java序列化? 59 12、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。 60 13、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 63 14、字节流与字符流的区别 63 15、怎么判断指定路径是否为目录 65 16、怎么获取指定路径下的全部文件 65 17、Java怎么读取文件和写入文件 65 18、java怎么复制文件 68 19、用JDBC如何调用存储过程 69 20、JDBC中的PreparedStatement相比Statement的好处 71 21、写一个用jdbc连接实例。 71 22、ArrayList和Vector的区别? 73 23、List、Set和Map的区别? 74 24、Collection 和 Collections的区别。 74 25、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 75 26、HashMap与HashTable的区别 75 27、Java中有多少种数据结构,分别是什么? 76 28、Arraylist 和Linkedlist 的区别 76 29、List遍历方式有多少种 76 30、Map怎么遍历 76 31、怎么获取Map所有的key,所有的value 77 32、获取Class的实例有几种方式 77 33、怎么获取类中所有的方法,所有属性 77 34、JDBC常用接口有哪些? 77 35、Statement 中execute、executeUpdate、executeQuery这三者的区别 78 36、jdbc中怎么做批量处理的? 80 37、什么是json 83 38、json与xml的区别 83 39、XML和HTML的区别? 84 40、XML文档定义有几种形式?它们之间有何本质区别? 84 41、什么是java反射机制? 84 42、hashmap的底层实现 85 43、什么是java内存泄漏,怎么预防? 85 七、框架部分 85 1、谈谈你对Struts2的理解。 85 2、谈谈你对Hibernate的理解。 86 3、你对Spring的理解。 87 4、Struts2优缺点 87 5、ORM工作原理? 89 6、struts2的核心组件有哪些? 89 7、Strus2的执行过程 89 8、为什么要使用struts2? 90 9、openSession和getCurrentSession 90 10、拦截器的作用?拦截器和过滤器的区别? 91 11、struts.xml中result的type有哪些类型? 91 12、什么时候用JDBC什么时候用Hibernete; 91 13、hibernate 数据的三个状态 91 14、Hibernate中load和get的区别? 92 15、Hibernate的工作原理? 92 16、hibernate优缺点? 92 17、Hibernate是如何延迟加载的? 93 18、如果优化Hibernate? 93 19、什么是ORM? 94 20、Hibernate的主键生成策略? 94 21、Hibernate的级联操作 94 22、Hibernate有哪5个核心接口? 95 23、什么是重量级?什么是轻量级? 95 24、谈谈Spring的IOC和DI

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧