
首先是java上传功能:
//获取参数文件流,并将文件流转化成二进制数组,适应JSP与Servlet
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload sfu = new ServletFileUpload(factory); sfu.setFileSizeMax(102400000);
sfu.setSizeMax(204800000);
List items = null;
try {
items = sfu.parseRequest(request);
} catch(Exception e) {
e.printStackTrace();
}
Iterator iter = items==null?null:items.iterator();
while(iter != null && iter.hasNext()) {
FileItem item = (FileItem)iter.next();
if(item.isFormField()) {
System.out.print("form field:");
System.out.print(item.getFieldName() + " ");
System.out.print(item.getString());
}else if(!item.isFormField()) {
System.out.println("client name:" + item.getName());
String fileName = item.getName();
//item.getInputStream() 获得文件流方法,其他文件不需要转化成二进制数组则不需要下面的转换
BufferedInputStream in = new BufferedInputStream(item.getInputStream());
byte[] b = new byte[in.available()];
in.read(b);
}
}
其次是java实现下载功能:
public class EmpPhotoDao {
//读取人员照片blob字段
public static List<Map> readPhoto(Object param){
DataSource ds = null;
Connection con = null;
PreparedStatement ps = null;
ResultSet resultSet = null;
InputStream inputStream = null;
List<Map> result = new ArrayList<Map>();
try {
SqlID sqlid = new SqlID("HREGEmpPhoto","readPhoto");
SqlMapClientImpl client = BeanContext.getSqlMapClientImpl();
/*取得查询语句*/
MappedStatement statement = client.getMappedStatement(sqlid
.getSqlID());
/*取得ibatis sql对象*/
Sql sql = statement.getSql();
/*取得ibatis 参数map对象*/
ParameterMap parameterMap = null;
RequestScope requestScope = new RequestScope();
requestScope.setStatement(statement);
if (sql instanceof DynamicSql/*动态sql*/) {
parameterMap = sql.getParameterMap(requestScope, param);
}else{
parameterMap = statement.getParameterMap();
}
/*取得带参数的sql语句*/
String s = sql.getSql(requestScope, param);
//取得SQL连接对象
ds = (DataSource)BeanContext.getBean("dataSource");
con = ds.getConnection();
ps = con.prepareStatement(s);
if (parameterMap != null){
if(param instanceof Map){
parameterMap.setParameters(requestScope, ps, parameterMap.getParameterObjectValues(requestScope, param));
}else{
if(s.indexOf("?")>0){
ps.setString(1, (String)param);
}
}
}
/*执行查询*/
resultSet = ps.executeQuery();
/*转换成目标对象*/
Class c = statement.getResultMap().getResultClass();
ResultSetMetaData rsm = resultSet.getMetaData();
int columnCount = rsm.getColumnCount();
while (resultSet.next()) {
Map objMap = new HashMap();
for (int i = 0; i < columnCount; i++) {
if (resultSet.getObject(i + 1) instanceof Blob) {
Blob blob = resultSet.getBlob(i + 1);
Long length = blob.length();
inputStream = blob.getBinaryStream();
if(inputStream != null){
byte [] bytes = new byte[length.intValue()];
inputStream.read(bytes);
objMap.put(rsm.getColumnName(i + 1), bytes);
}
inputStream.close();
} else {
objMap.put(rsm.getColumnName(i + 1), resultSet.getObject(i + 1));
}
}
result.add(objMap);
}
} catch (SQLException e) {
e.printStackTrace();
throw new PlatException(ExceptionUtil.getDB2CNMessage(e));
}catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(ps!=null)
ps.close();
if(resultSet!=null)
resultSet.close();
DataSourceUtils.doReleaseConnection(con, ds);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
throw new PlatException(ExceptionUtil.getDB2CNMessage(e1));
}
return result;
}
}
}
最后看JSP如何将数据库中的Blob二进制数组转成图片
<html code_snippet_id="96378" snippet_file_name="blog_20131204_2_1772916" name="code" class="java"> <[email protected] import="javax.servlet.jsp.tagext.TryCatchFinally"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="*.EmpPhotoDao" %> <%@ page import="java.util.Map" %> <%@ page import="java.util.HashMap" %> <%@ page import="java.io.OutputStream" %> <%@ page import="java.util.List" %> <% OutputStream output = null; try{ String empId = request.getParameter("empId"); if(empId == null || empId.equals("")){ return; } Map param = new HashMap(); param.put("empId",empId); //调用java类方法获取结果集 List<Map> result = EmpPhotoDao.readPhoto(param); if(result != null && result.size() > 0){ for(Map map:result){ byte[] bytes = (byte[])map.get("photo"); if(bytes != null){ String sbytes = new String(bytes); //设置HTML响应内容类型为图片 if(sbytes.equalsIgnoreCase("GIF")){ response.setContentType("image/gif"); }else{ response.setContentType("image/jpeg"); } //输出图片 output = response.getOutputStream(); output.write(bytes,0,bytes.length); output.flush(); }else{ return; } } } }catch(Exception e) { e.printStackTrace(); } finally{ try{ if(output !=null){ //关闭流 output.close(); out.clear(); out = pageContext.pushBody(); } }catch (Exception e) { e.printStackTrace(); } } %>
jsp显示图片代码:
<!-- src为上面jsp的路径-->
<img src="EFMPX/HR/EG/imageDownload.jsp?empId=${emp.empId}" width="107" height="155" />
</html>

转载请注明来源网站:blog.ytso.com谢谢!
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/14729.html