jsp能否将二进制文件流写到页面上?

tongshushan 2010-08-23 12:50:40
InputStream blobStream = cf.getContent().getBinaryStream();//文件内容是从Oracle Blob类型字段里取出来
怎样能将这个InputStream 写到页面了向用户展示文件内容?
...全文
266 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tongshushan 2010-08-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chouy 的回复:]
设置一下输出的文字类型,然后输出就行了.
就像请求图片那样.
[/Quote]
就像请求图片那样 是什么意思?
商科程序员 2010-08-23
  • 打赏
  • 举报
回复
设置一下输出的文字类型,然后输出就行了.
就像请求图片那样.
axman 2010-08-23
  • 打赏
  • 举报
回复
byte[] buffer = new byte[10];这个缓冲开得也太小了。建立1024*x
axman 2010-08-23
  • 打赏
  • 举报
回复
你把字节数组当作字符串输出,当然输出的是这个数组的toString方法,当然是[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde
这是正确的结果,如果不是这样那就不正常了。

要把二进制内容正确输出应该是:

InputStream blobStream = cf.getContent().getBinaryStream();
response.setHeader("Content-Disposition", "attachement;filename=a.xml;");
response.setContentType("application/xml;charset=utf-8");

ServletOutputStream out = respone.getOutputStream(); //这前不能有getWriter的调用


byte[] buffer = new byte[10];
int nbytes = 0;
while ((nbytes = blobStream.read(buffer)) != -1){ out.write(buffer,0,nbytes);
}
out.flush();
blobStream.close();
magong 2010-08-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tongshushan 的回复:]
InputStream blobStream = cf.getContent().getBinaryStream();
[/Quote]
如果你确信字段中存储的确实是文字,是否可以尝试在blobStream套一个Reader来读字符呢,如
Reader reader = new InputStreamReader(blobStream);
然后用read()方法读字节,用print写出

试试看
sebatinsky 2010-08-23
  • 打赏
  • 举报
回复
楼主记住的是就是几乎需求都是可以的,只是实现的方式而已,很多时候,可以google,
tongshushan 2010-08-23
  • 打赏
  • 举报
回复
InputStream blobStream = cf.getContent().getBinaryStream();
response.setHeader("Content-Disposition", "attachement;filename=a.xml;");
response.setContentType("application/xml;charset=utf-8");
byte[] buffer = new byte[10];
int nbytes = 0;
while ((nbytes = blobStream.read(buffer)) != -1){ out.print(buffer);
}
blobStream.close();

我用的是这段代码,但是输出的是这些东西:
[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde[B@1f78dde
而不是xml的内容。
tongshushan 2010-08-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 axman 的回复:]
“multipart/form-data指定用流来显示”
不懂不要装。multipart/form-data是用来从客户端向服务端上传时用的mime.
要向页面输出你的binary内容要首选 知道它原来的是什么类型的内容。比如是image还是doc?
知道了原来的类型可以输出相应的mime,然后内容直接输出去就行了。
[/Quote]

数据是从服务器端的数据库来的,不是从客户端来的。类型是xml或者properties,写到页面的目的就是要让客户看到当前的配置文件的内容。
axman 2010-08-23
  • 打赏
  • 举报
回复
“multipart/form-data指定用流来显示”
不懂不要装。multipart/form-data是用来从客户端向服务端上传时用的mime.
要向页面输出你的binary内容要首选 知道它原来的是什么类型的内容。比如是image还是doc?
知道了原来的类型可以输出相应的mime,然后内容直接输出去就行了。
Sharesin 2010-08-23
  • 打赏
  • 举报
回复
设置一下响应格式,应该就可以了,不过必须是jsp支持的格式
simaa0106 2010-08-23
  • 打赏
  • 举报
回复
可以写。
multipart/form-data指定用流来显示。

后台代码的话自己百度下吧。一大堆

81,092

社区成员

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

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