关闭

java 上传图片与图片读取

31454人阅读 评论(1) 收藏 举报

上传:

//获取参数文件流,并将文件流转化成二进制数组,适应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 (SizeLimitExceededException e) { 

System.out.println("size limit exception!"); 

} 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类:

import java.io.InputStream;
import java.math.BigDecimal;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.jdbc.datasource.DataSourceUtils;

import com.baosight.efmpx.system.sql.SqlID;
import com.baosight.efmpx.system.util.BeanContext;
import com.baosight.efmpx.system.util.ExceptionUtil;
import com.baosight.iplat4j.core.exception.PlatException;
import com.baosight.iplat4j.dao.ibatis.sqlmap.engine.impl.SqlMapClientImpl;
import com.ibatis.sqlmap.engine.mapping.parameter.ParameterMap;
import com.ibatis.sqlmap.engine.mapping.sql.Sql;
import com.ibatis.sqlmap.engine.mapping.sql.dynamic.DynamicSql;
import com.ibatis.sqlmap.engine.mapping.statement.MappedStatement;
import com.ibatis.sqlmap.engine.scope.RequestScope;


/**
 * @author danger
 *读取人员照片Dao
 */
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 二进制数组转成图片


<%@page 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" />




   
0
5

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:207048次
    • 积分:1688
    • 等级:
    • 排名:千里之外
    • 原创:14篇
    • 转载:25篇
    • 译文:0篇
    • 评论:13条
    最新评论