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流输出图片急求!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)