java 上传图片与图片读取

原创 2013年12月04日 16:34:18

上传:

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





            
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

往MySQL中存储图片

往MySQL中存储图片 1 介绍在设计到数据库的开发中,难免要将图片或音频文件插入到数据库中的情况。一般来说,我们可以同过插入图片文件相应的存储位置,而不是文件本身,来避免直接向数据库里插入的麻烦。但...

关于web项目中的图片上传、并显示问题

一、数据库存储 直接把图片的二进制码存到数据库 参考blog: http://blog.csdn.net/hope2jiang/article/details/590733 二、webRoot下存...

Java TCP使用Socket进行网络通信(3)

本文演示,TCP使用Socket进行网络通信,建立简单的客户端,并使用客户端给服务器发送一条消息,服务端接收到后,将数据打印在控制台上。 1)客户端,发送一个消息给服务端。 2)服务端,接收到客户端的...

Java TCP使用Socket进行网络图片传送(6)

本文演示,使用Socket进行网络图片传送,实现客户端的client.bmp文件上传到服务端。 1)客户端,上传client.bmp图片给服务端,并接受服务端返回的“上传成功”消息。 2)服务端,接受...

Java Socket通信实现文件传输/图片传输

转载自残剑的博客http://blog.chinaunix.net/uid-25885064-id-3362396.html Scoket发送 ClientTcpSend.java: import...

Java UDP使用Socket进行网络聊天(2)之群聊版

本文演示,使用Socket进行网络聊天之群聊,实现客户端给"局域网"网段里面的所以机器发送广播,当发送“886”的时候,表示客户端关闭。 1)客户端,给服务器发送数据,发送“886”表示关闭客户端。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)