java web二进制流的图片如何用response返回给前台

java web二进制流的图片如何用response返回给前台,第1张

FileOutputStream很明显你是用的文件流返回的

//以byte流的方式打开文件d:\1gif

FileInputStreamhFile=newFileInputStream(url);   //得到文件大小

inti=hFileavailable();

bytedata[]=newbyte[i];    //读数据

hFileread(data);     //得到向客户端输出二进制数据的对象

OutputStreamtoClient=responsegetOutputStream();     //输出数据

toClientwrite(data);

toClientflush();

toClientclose();

hFileclose();

扩展资料

如果是纯文本使用字符流,如果二进制文件,使用字节流。

如果只是得到信息,原样不动,不进行修改 *** 作,例如文件上传和下载,这时就使用字节流。文件上传:在服务器端把浏览器端信息提取出来。文件下载:把服务器端内容写给浏览器端。

如果要 *** 作的是自定义信息,这时使用字符流。

通过response获取的输出流它的真实类型是什么?

ServletOutputStream responsegetOutputStream();

PrintWriter responsegetWriter();

ServletOutputStream由于使用字节流多数是原样复制,所以使用write方法,而不是print方法。

PrintWriter:打印流,两个特点:1可以设置自动刷新。2可以将信息原样输出。

public static void test3() throws Exception{

FileInputStream fis = new FileInputStream("e:\\java\\jpg");

FileOutputStream fos = new FileOutputStream("e:\\照片\\1jpg");

byte[] buffer = new byte[1024];

int ll;

while ((ll = fisread(buffer)) > 0) {

foswrite(buffer, 0, ll);

}

fisclose();

fosclose();

}

解决方法:int len = fisread(); read 方法加入参数bys,这样才能把fis的内容注入bys里面。

顺便说下,FileInputStream不能正确输出中文,因为这个是按字节输出的,每个中文站2个字节,会出现乱码。

如果要存数据库的话,数据库存字段用blob形式的(照片:zp为例)。

而且不能直接存,在存之前zp字段先插入一个emptyBLOB(),

然后select ZP from 表 for update。再用输入流的形式写进去。

// 先检索出来字段,必须使用oracle的类:oraclesqlBLOB

oraclesqlBLOB blob = null;

if (rsnext())

{

blob = (oraclesqlBLOB) rsgetBlob("ZP");

// 到数据库的输出流

OutputStream outStream = blobgetBinaryOutputStream();

// 将输入流写到输出流

byte[] b = new byte[blobgetBufferSize()];

int len = 0;

while ((len = isread(b)) != -1)

{

outStreamwrite(b, 0, len);

// blobputBytes(1,b);

}

isclose();

outStreamflush();

outStreamclose();

}

取照片的话,取出来转化成流的形式直接创建jpg文件就行了。

Blob b = rsgetBlob("ZP");

File f = null;

if (b != null) {

is = bgetBinaryStream();

f = new File( "c:\\zpjpg");

if (!fexists()) {

fcreateNewFile();

}

os = new FileOutputStream(f);

int len;

byte buf[] = new byte[2048];

while ((len = isread(buf)) != -1) {

oswrite(buf, 0, len);

}

isclose();

osflush();

osclose();

}

强烈建议只存取照片路径,这样方便。

将插入数据库时,首先将转换成二进制格式,同样读取的时候将二进制再解析回来就OK了

解析二进制:

int length = 0;

ServletOutputStream toClient = null;

byte[] buf = null;

Blob image = dengjigetTupian(); //dengji 实体 从数据库中获取

try {

length = (int)imagelength();//取得流中可用的字节总数

buf = imagegetBytes(1, length);//获取Blob字节数组

thisgetResponse()setContentType("image/jpeg");

thisgetResponse()setHeader("Pragma", "No-cache");

thisgetResponse()setHeader("Cache-Control", "no-cache");

thisgetResponse()setDateHeader("Expires", 0);

toClient = thisgetResponse()getOutputStream();//获取输出流

for(int i = 0 ; i < buflength ; i++ ){

toClientwrite(buf[i]);//输出到页面

}

toClientclose();//关闭输出流

} catch (SQLException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

}

以上就是关于java web二进制流的图片如何用response返回给前台全部的内容,包括:java web二进制流的图片如何用response返回给前台、用字节输入输出流,对在e:\java\图片.jpg,进行复制到e:\照片\图片1.jpg、JAVA如何直接在console控制台上用IO流输出图片急求!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9590519.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存