jsp页面显示二进制的图片数据问题。(100分)

  • 主题发起人 主题发起人 yps
  • 开始时间 开始时间
Y

yps

Unregistered / Unconfirmed
GUEST, unregistred user!
import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class showimage extends HttpServlet {
public voiddo
Get(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
try{
FileInputStream hFile = new FileInputStream("d://1.gif");
// 以byte流的方式打开文件 d:/1.gif
int i=hFile.available();
//得到文件大小
byte data[]=new byte;
hFile.read(data);
//读数据
hFile.close();
res.setContentType("image/*");
//设置返回的文件类型
OutputStream toClient=res.getOutputStream();
//得到向客户端输出二进制数据的对象
toClient.write(data);
//输出数据
toClient.close();
}
catch(IOException e) //错误处理
{
PrintWriter toClient = res.getWriter();
//得到向客户端输出文本的对象
res.setContentType("text/html;charset=gb2312");
toClient.write("无法打开图片!");
toClient.close();
}
}
}
以上代码无法显示出图片,只显示图片框。
图片读取是正确的,显示却出现问题,这是为什么呢?
 
res.setContentType("image/*");
//设置返回的文件类型
没有制定特定的格式,比如image/gif或者image/jpg.会不会是这个问题?
 
试试把hFile.close()放到toClient.close()之前
 
只要在你的页面中加入以下这句即可
<img src="showimage"> <!--这里的showimage是你的servlet名---->
 
res.setContentType("text/html;charset=gb2312"),你的数据流格式是文本当然不行,改成“image/gif"就可以了。
 
我试过了,没有什么问题,只是有一点,如果把contentType设为image/*的话,直接请求
是不行的,总是提示文件下载,(我的环境是resin2.1.6),如果用楼上所说的那样来请
求servlet就没问题。
 
客户端文件流格式的识别者是客户端软件,只要客户端浏览器能够识别数据流的头格式,完全就可以进行解析。
头设置成未文件格式,实际数据是什么没关系,随便输出些数据就行,就不会出现文件下载的问题了。另外IE对
image/*的识别好像不行,还是改成准确的图形格式好,如果是数据库,那么最好新增一下
上传文件的文件扩展名,否则就时间用编程判断数据流的类型(在服务器端进行分析)。
 
后退
顶部