简单 文件上传

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>文件上传页面测试</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
   	<form action="servlet/UpLoad" method="post" enctype="multipart/form-data">
   		<input type="file" name="uploadfile">
   		<input type="submit" name="submit" value="上传">
   	</form>
  </body>
</html>

 

showpic.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*,javax.sql.*,javax.naming.*,java.io.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>显示数据库中的图片对象</title>
</head>
<body>
	上传用户名:${requestScope.username }<br>
	<img src="ShowImage?picid=23" width="500px" height="600px">
		<!-- 读取查询数据库中的图片对象 -->
	<%--
		Context context=new InitialContext();
		DataSource ds=(DataSource)context.lookup("java:/comp/env/jdbc/upload");
		Connection con=ds.getConnection();
		String sql="select pic_image from pic where pic_id=23";
		PreparedStatement preparedStatement= con.prepareStatement(sql);
		ResultSet rs=preparedStatement.executeQuery();    //得到查询结果集
		Blob picture=null;
		if(rs.next()){
			picture=rs.getBlob(1);
			long size=picture.length();    //得到图片长度
			byte [] bs=picture.getBytes(1,(int)size);
			OutputStream os=response.getOutputStream();
			os.write(bs);    //指定byte数组写入输出流
			os.flush();    //刷新输出流,写出缓冲的输出字节
   
            out.clear();    //JspWriter
            out = pageContext.pushBody();  //BodyContent is a subclass of JspWriter 返回一个空的out对象
           
            //public BodyContent pushBody()
            //Return a new BodyContent object, save the current "out" JspWriter, 
            //and update the value of the "out" attribute in the page scope attribute namespace of the PageContext
            
            //public abstract void clear()throws IOException
            //Clear the contents of the buffer. 
            //If the buffer has been already been flushed 
            //then the clear operation shall throw an IOException to signal the fact that 
            //some data has already been irrevocably written to the client response stream
		}else{
			out.println("没有找到图片");
		}
		
	 --%>
	 
</body>
</html>

 

 

 

 

 uploadDatabase.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>文件上传例题</title>
<style type="text/css">
	form{ margin-top:100px;}
</style>
</head>

<body>
  目录1:<%=request.getSession().getServletContext().getContextPath()%>
  目录2:<%=request.getSession().getServletContext().getRealPath("/")%>
<form action="servlet/UpLoadDatabase" method="post" enctype="multipart/form-data" name="form1" id="form1">
  <table width="580" border="0" align="center" cellpadding="10" cellspacing="1" bgcolor="#999999">
    <tr>
      <td bgcolor="#FFFFFF">网名:</td>
      <td colspan="2" bgcolor="#FFFFFF"><input name="username" type="text" id="username" /></td>
    </tr>
    <tr>
      <td bgcolor="#FFFFFF">文件:</td>
      <td colspan="2" bgcolor="#FFFFFF"><input type="file" name="file" /></td>
    </tr>
    <tr>
      <td bgcolor="#FFFFFF">&nbsp;</td>
      <td bgcolor="#FFFFFF"><input name="submit" type="submit" id="submit" value="提交" /></td>
      <td bgcolor="#FFFFFF"><input name="reset" type="reset" id="reset" value="刷新" /></td>
    </tr>
  </table>
</form>
</body>
</html>

 

 

 

 

 

 

 

package servlets;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;

import javax.naming.*;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.*;
import javax.imageio.*;

public class ShowImage extends HttpServlet {

	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("图片查un:"+request.getParameter("picid"));
		//从客户端获取要查询的ID
		Integer picid=new Integer(request.getParameter("picid"));
		System.out.println("图片的ID"+picid);
		//数据库连接对象,方便finally使用
		Connection con=null;
		
		//预处理命令对象
		PreparedStatement ps=null;
		
		//结果集对象
		ResultSet rs=null;
		try{
			Context context=new InitialContext();
			DataSource ds=(DataSource)context.lookup("java:comp/env/jdbc/upload");
			
			//得到数据库连接对象
			con=ds.getConnection(); 
			String sql="select pic_image from pic where pic_id=?";
			ps=con.prepareStatement(sql);
			
			//设置查询参数
			ps.setInt(1,picid);
			
			//执行查询
			rs=ps.executeQuery();
			if(rs.next()){
				response.setContentType("image/png");
				Blob pic=rs.getBlob(1);
				System.out.println(pic);
				//得到向客户端响应的输出流
				ServletOutputStream sos=response.getOutputStream();
				
				//通过二进制大对象得到输入流
				InputStream is=pic.getBinaryStream();
				
				//通过ImageIO的静态方法得到BufferedImage
				BufferedImage image=ImageIO.read(is);
				System.out.println("图片"+pic);
				/*
				 * 使用指定的png格式把(实现RenderedImage接口的BufferedImage)
				 * image对象写入OutputStream 类型对象
				 */
				ImageIO.write(image,"png",sos);
				
				//关闭输入流对象
				is.close();
				
				//刷新输出流,写出缓冲的输出字节
				sos.flush();
				sos.close();
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try {
				if(con!=null){
					con.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}//关闭数据库连接try块
		}
	}

	public void init() throws ServletException {
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request,response);
	}

}

 

 

 

 

 

 

 

package servlets;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.*;

public class UpLoad extends HttpServlet {

	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		try{
		DiskFileUpload fu=new DiskFileUpload();
		PrintWriter out=response.getWriter();
		
		//设置上传对象的字符编码和request一致
		fu.setHeaderEncoding(request.getCharacterEncoding());
		
		//限制上传文件大小
		fu.setSizeMax(1024*1024*16);
		
		//设置临时保存解析占用内存空间大小
		fu.setSizeThreshold(1024*1024*16);
		List fileItems=fu.parseRequest(request);
		Iterator it=fileItems.iterator();
		FileItem fi=(FileItem)it.next();  //解析成fileItem
		String name=fi.getName();    //得到文件路径和名字
		
		if(name.lastIndexOf("\\")!=-1){
			//得到文件名去除路径名
			String filename=name.substring(name.lastIndexOf("\\"));
			String webdir=request.getSession().getServletContext().getRealPath("/");
			fi.write(new File(webdir+"uploadimage"+filename));
			
			out.print("上传成功");
		}else{
			out.print("上传失败!");
		}	
		}catch(Exception e){
			e.printStackTrace();
		}
	}

	public void init() throws ServletException {
		
	}

}

 

 

 

 

 

/**
 * 上传信息到数据库包括图片
 */
package servlets;

import java.io.*;
import java.util.*;
import java.sql.*;

import javax.naming.*;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.*;

import org.apache.commons.fileupload.*;

/**
 *
 *
 */
public class UpLoadDatabase extends HttpServlet {
	private static final long serialVersionUID = 5220553409822159109L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request,response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		DiskFileUpload df=new DiskFileUpload();
		df.setHeaderEncoding(request.getCharacterEncoding());
		df.setSizeMax(1024*1024*16);    //设置文件最大为16M
		df.setSizeThreshold(1024*1024*3);    //设置内存中缓冲3M
		if(df.isMultipartContent(request)){
			InputStream is=null;
			PreparedStatement pst=null;
			Connection con=null;
			try {
				Map map=new HashMap();
				List fileList=df.parseRequest(request);    //解析请求到list集合
				Iterator fileItems=fileList.iterator();    //迭代器
				while(fileItems.hasNext()){
					FileItem ft=(FileItem)fileItems.next();
					if(ft.isFormField()){    //如果不是文件
						map.put(ft.getFieldName(),ft.getString());
						request.setAttribute(ft.getFieldName(),ft.getString());
					}else{
						map.put(ft.getFieldName(),ft);
					}					
				}//遍历迭代器对象循环
				FileItem file=(FileItem)map.get("file");
				Context context = new InitialContext();
				DataSource ds = (DataSource) context.lookup("java:comp/env/jdbc/upload");
				con = ds.getConnection();
				String inserta = "insert into pic (pic_name,pic_image) values (?,?)";
				pst = con.prepareStatement(inserta);
				pst.setString(1, map.get("username").toString());
				is = file.getInputStream(); //得到文件输入流
				pst.setBinaryStream(2, is, (int)file.getSize());
				int result = pst.executeUpdate(); //执行更新插入数据
				if (result >= 1) {
					request.setAttribute("result", "上传文件成功!");
				} else {
					request.setAttribute("result", "上传文件失败!");
				}//判断是否上传成功块结束
			} catch (Exception e) {
				System.out.println(new String(e.getMessage().getBytes("ISO-8859-1"),"GBK"));
				e.printStackTrace();
			}finally{
				try {
					pst.close();
					con.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}    
		}else{
			request.setAttribute("result","只能处理multipart/form-data类型的数据!");
			return;
		}//判断是否是multipart/form-data类型数据块结束
		//request.setAttribute("picid",23);
		System.out.println("目录1"+request.getSession().getServletContext().getContextPath());
		System.out.println("目录2"+request.getSession().getServletContext().getRealPath("/"));
		RequestDispatcher td=request.getRequestDispatcher("../showpic.jsp?picid=23");
		td.forward(request,response);
	}
}

 

 

相关源代码

你可能感兴趣的:(sql,jsp,servlet,css,OS)