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" />




                    

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

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

Java实现图片上传到服务器,并把上传的图片读取出来

在很多的网站都可以实现上传头像,可以选择自己喜欢的图片做头像,从本地上传,下次登录时可以直接显示出已经上传的头像,那么这个是如何实现的呢?   下面说一下我的实现过程(只是个人实现思路,实际网站怎么实...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

java中上传本地图片

点击上传图片按钮,上传本地 效果如图: 1:原始图框: 2:点击预览,弹出本地弹框: 3:选中图片点击打开/确认: 实现的代码如下: 前台代码: 身份证正面照片: ...

java多图片上传功能的实现

开发环境:jdk1.7,MyEclipse10 框架用的是spring。用到了maven工具(maven的包百度下就可以)第一步、先在Spring中对图片进行限制 ...

java上传多张图片,并且可以删除上传的图片。

可以删除从库里查询出来的图片,也可以删除刚上传到图片,其实不多,为了任务请耐心看完: 效果如下: 1:最开始效果 2:点击上传图片,弹出本地上传,并有删除按钮: 3:点击删除,弹出删除...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

java实现文件上传与下载

感谢:孤傲苍狼,JavaWeb学习总结(五十)——文件上传和下载            JAVA中文件上传下载知识点整理,            东风化宇,文件上传 一、对于文件上传,浏览器在上传的过...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 上传图片与图片读取
举报原因:
原因补充:

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