CodeCharge Studio
search Register Login  

Visual PHP Web Development

Visually Create Internationalized Web Applications, Web Reports, Calendars, and more.
CodeCharge.com

YesSoftware Forums -> CodeCharge Studio -> Java

 share upload com(text file and binary file)

Print topic Send  topic

Author Message
privatemiao


Posts: 17
Posted: 01/19/2007, 3:19 AM

code f:
  
  
/**  
 * 实现文件上传   包括取得参数	按照顺序  
 * @author Love Me  
 */  
package forum.com;  
  
import java.io.FileNotFoundException;  
import java.io.FileOutputStream;  
import java.io.IOException;  
  
import javax.servlet.ServletInputStream;  
import javax.servlet.http.HttpServletRequest;  
  
public class UploadBean {  
	private ServletInputStream is = null;  
	private String fileName = null;  
	private String boundary = null;  
	private String filePath = null;  
	  
	public UploadBean(HttpServletRequest request) {  
		this.boundary = request.getContentType();  
		this.boundary = "--" + this.boundary.substring(this.boundary.indexOf("=") + 1, this.boundary.length());  
		try {  
			this.is = request.getInputStream();  
		} catch (IOException e) {  
			e.printStackTrace();    
		}  
	}  
	  
	  
	public String getParameter(String name){	  
		String line = null;  
		byte[]buffer = new byte[1024];  
		int count = 0;  
		try {  
			while((count = is.readLine(buffer, 0, 1024)) != -1){  
//				System.out.println("2");  
				line = new String(buffer, 0, count);  
				if (line.indexOf("name=\""+name+"\"") > 0){  
//					System.out.println("3");  
					break;  
				}  
			}  
			return getMyParameter();  
		} catch (IOException e) {  
			e.printStackTrace();  
		}  
		return null;  
	}  
	  
	private String getMyParameter(){  
		byte[]buffer = new byte[1024];  
		int count = 0;  
		String line  = null;  
		String data = "";  
		boolean flag = true;//第一次  
		  
		//跳过空行  
		try {  
			is.readLine(buffer, 0, 1024);  
		} catch (IOException e1) {  
			e1.printStackTrace();  
		}  
		try {  
			while((count = is.readLine(buffer, 0, 1024)) != -1){  
				line = new String(buffer, 0, count);  
				//文档末尾  
				if ((line.indexOf(this.boundary) == 0) && count == this.boundary.length() + 4){  
//					System.out.println("文档末尾结束");  
					break;  
				}  
				//段落结束  
				if ((line.indexOf(this.boundary) == 0) && count == this.boundary.length() + 2){  
//					System.out.println("段落结束结束");  
					break;  
				}  
				//自己控制 空行  
				if (flag){  
					line = line.substring(0, line.length() - 2);  
					flag = !flag;  
				}else{  
					line = line.substring(0, line.length() - 2);  
					line = "\r\n" + line;  
				}  
				data += line;  
//				System.out.println("Amount: " + amount);  
//				System.out.println("NewData: " + data);  
			}  
			try{  
				return data;  
			}catch(Exception e){  
				return null;  
			}  
		} catch (IOException e) {  
			e.printStackTrace();  
		}  
		return null;  
	}  
	  
	/**  
	 * 根据 name 找到 filename(定位) 返回 fileName  
	 * @author Love Me  
	 * @return fileName  
	 */  
	public String getFileName(String name){	  
		String line = null;  
		byte[]buffer = new byte[1024];  
		int count = 0;  
		try {  
			while((count = is.readLine(buffer, 0, 1024)) != -1){  
				line = new String(buffer, 0, count);  
				if (line.indexOf("name=\""+name+"\"") > 0){  
					fileName = line.substring(line.lastIndexOf("\\") + 1, line.length() - 3);  
					break;  
				}  
			}  
		} catch (IOException e) {  
			e.printStackTrace();  
		}  
//		System.out.println("得到的文件名为: " + fileName);  
		if (fileName.lastIndexOf('.') < 0){  
			return null;  
		}  
		return fileName;  
	}  
	  
	/**  
	 * 写文件  
	 *  
	 */  
	public void store(){  
		byte[]buffer = new byte[1024];  
		int count = 0;  
		FileOutputStream os = null;  
		String line  = null;  
		  
		if((this.fileName == null) || (this.fileName.length() < 1)){  
//			System.out.println("未指定文件名");  
			return;  
		}  
		if((this.filePath == null) || (this.filePath.length() < 1)){  
//			System.out.println("未指定路径");  
			return;  
		}  
		try {  
			os = new FileOutputStream(this.filePath + this.fileName);  
			while((count = is.readLine(buffer, 0, 1024)) != -1){  
				line = new String(buffer, 0, count);  
				if (line.indexOf("Content-Type") >= 0){  
					is.readLine(buffer, 0, 1024);  
					continue;  
				}  
				//文档末尾  
				if ((line.indexOf(this.boundary) == 0) && count == this.boundary.length() + 4){  
//					System.out.println("文档末尾结束");  
					break;  
				}  
				//段落结束  
				if ((line.indexOf(this.boundary) == 0) && count == this.boundary.length() + 2){  
//					System.out.println("段落结束结束");  
					break;  
				}  
				//自己控制 空行  
//				if (flag){  
//					os.write(buffer, 0, count - 2);  
//					flag = !flag;  
//				}else{  
//					os.write("\r\n".getBytes());  
//					os.write(buffer, 0, count - 2);  
//				}  
				os.write(buffer, 0, count);  
			}  
			os.close();  
		} catch (FileNotFoundException e) {  
			e.printStackTrace();  
		} catch (IOException e) {  
			e.printStackTrace();  
		}finally{  
			if (os != null){  
				try {  
					os.close();  
				} catch (IOException e) {  
					e.printStackTrace();  
				}  
			}  
		}  
	}  
	  
	  
	/**  
	 * 以新的文件名写文件  
	 * @author Love Me  
	 * @param fileName  
	 */	  
	public void setFilename(String fileName){  
		this.fileName = fileName;  
	}  
	  
	public void setFilePath(String filePath){  
		this.filePath = filePath;  
	}  
	public void close(){  
		try {  
			is.close();  
		} catch (IOException e) {  
			e.printStackTrace();  
		}  
	}  
}  
  
  

_________________
me was me
View profile  Send private message
privatemiao


Posts: 17
Posted: 01/19/2007, 3:20 AM

you can use it like this:
  
package forum.server;  
  
import java.io.File;  
import java.io.IOException;  
import java.io.UnsupportedEncodingException;  
import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
import forum.ConnectionManager;  
import forum.bean.Customer;  
import forum.com.Methods;  
import forum.com.UploadBean;  
  
public class Register extends HttpServlet {  
  
	/**  
	 *   
	 */  
	private static final long serialVersionUID = 1L;  
  
	public void doGet(HttpServletRequest request, HttpServletResponse response) {  
		doPost(request, response);  
	}  
  
	public void doPost(HttpServletRequest request, HttpServletResponse response) {  
		UploadBean upload = null;  
		Customer customer = null;  
  
		try {  
			request.setCharacterEncoding("GBK");  
		} catch (UnsupportedEncodingException e) {  
			e.printStackTrace();  
		}  
		// 验证上传文件大小  
		if (request.getContentLength() > 0.5 * 1024 * 1024) {  
			try {  
				response.sendRedirect("register.jsp?errormessage=BigSize");  
				return;  
			} catch (IOException e) {  
				e.printStackTrace();  
			}  
			return;  
		}  
  
		upload = new UploadBean(request);  
		customer = new Customer();  
		// //////////////////设置参数/////////////  
		// 1.customerID  
		customer.setCustomerID(Methods.getSerialID());  
		// 2.username  
		customer.setUserName(Methods.convertNullToNull(upload  
				.getParameter("username")));  
		if (!validateUserName(customer.getUserName())) {  
			try {  
				response.sendRedirect(  
						"register.jsp?errormessage=TheUserNameHadExist");  
				return;  
			} catch (IOException e) {  
				e.printStackTrace();  
			}  
			return;  
		}  
		// 3.password  
		customer.setPassword(Methods.convertNullToNull(upload  
				.getParameter("password")));  
		// 4.mail  
		customer  
				.setMail(Methods.convertNullToNull(upload.getParameter("mail")));  
		if ((!validateCustomerParameter(customer))  
				|| (!validateMail(customer.getMail()))) {  
			try {  
				response.sendRedirect(  
						"register.jsp?errormessage=TheMailHadExistOrParameterError&username="  
								+ customer.getUserName());  
				return;  
			} catch (IOException e) {  
				e.printStackTrace();  
			}  
			return;  
		}  
		// 5.registered  
		customer.setRegistered(Methods.GETCURTIME);  
		// 6.avatar(filename)  
		String __fileType = null;  
		__fileType = Methods.convertNullToNull(upload.getFileName("filename"));  
		if (__fileType.length() > 0) {// 文件是否存在  
			__fileType = __fileType.substring(__fileType.lastIndexOf(".") + 1);// 得到文件格式  
			// 验证图片格式  
			if (!validatePicType(__fileType)) {  
				upload.close();  
				try {  
					response.sendRedirect(  
							"register.jsp?errormessage=FileTypeError&username="  
									+ customer.getUserName() + "&mail="  
									+ customer.getMail());  
					return;  
				} catch (IOException e) {  
					e.printStackTrace();  
				}  
				return;  
			}  
			customer.setAvatar(customer.getCustomerID() + "." + __fileType);  
			upload.setFilePath(Methods.AVATAR_PATH);  
			upload.setFilename(customer.getAvatar());  
			upload.store();  
		}  
		// 7.个人签名  
		customer.setSignature(Methods.ConvertSpaceChars(Methods.convertNullToNull(upload  
				.getParameter("signature"))));  
		String __isNotify = null;  
		__isNotify = Methods.convertNullToNull(upload.getParameter("isnotify"));  
		if (__isNotify.length() > 0) {  
			customer.setIsnotify(1);// 同意  
		} else {  
			customer.setIsnotify(0);  
		}  
		// 8.登陆时间  
		customer.setLogon(Methods.GETCURTIME);  
		upload.close();  
		// //////////////////设置参数结束/////////////  
		String url = null;  
		if (!execute(customer)){  
			if (customer.getAvatar().length() > 0){  
				delThePicture(Methods.AVATAR_PATH + customer.getAvatar());  
			}  
			url = "register.jsp?errormessage=RegisterError&username=" + customer.getUserName() + "&mail=" + customer.getMail() + "&signature=" + customer.getSignature();  
		}else{  
			request.getSession().setAttribute("user", customer.getCustomerID());  
			url = "index.jsp?errormessage=RegisterSuccess";  
		}  
		try {  
			request.getRequestDispatcher(url).forward(request, response);  
		} catch (IOException e) {  
			e.printStackTrace();  
		} catch (ServletException e) {  
			e.printStackTrace();  
		}  
	}  
  
	/**  
	 * 验证图片格式  
	 *   
	 * @param fileType  
	 * @return  
	 */  
	private boolean validatePicType(String fileType) {  
		if ((fileType.equalsIgnoreCase("jpg"))  
				|| (fileType.equalsIgnoreCase("gif"))) {  
			return true;  
		}  
		return false;  
	}  
  
	/**  
	 * 验证用户名是否存在了  
	 *   
	 * @param userName  
	 * @return false if the username had exist  
	 */  
	private boolean validateUserName(String userName) {  
		ConnectionManager cm = null;  
		Connection con = null;  
		PreparedStatement prepStmt = null;  
		ResultSet rs = null;  
		String strSql = null;  
		boolean flag = false;  
  
		cm = new ConnectionManager("forum.properties");  
		con = cm.getConnection();  
		strSql = "select * from customers where username = '" + userName + "'";  
		try {  
			prepStmt = con.prepareStatement(strSql);  
			rs = prepStmt.executeQuery();  
			if (rs.next()) {  
				flag = false;  
			} else {  
				flag = true;  
			}  
			cm.closeResultSet(rs);  
			cm.closePrepStmt(prepStmt);  
			cm.closeConnection(con);  
			return flag;  
		} catch (SQLException e) {  
			e.printStackTrace();  
		} finally {  
			cm.closeAllDB(con, prepStmt, rs);  
		}  
		return false;  
	}  
  
	/**  
	 * 验证邮箱是否存在了  
	 *   
	 * @param userName  
	 * @return false if the username had exist  
	 */  
	private boolean validateMail(String mail) {  
		ConnectionManager cm = null;  
		Connection con = null;  
		PreparedStatement prepStmt = null;  
		ResultSet rs = null;  
		String strSql = null;  
		boolean flag = false;  
  
		cm = new ConnectionManager("forum.properties");  
		con = cm.getConnection();  
		strSql = "select * from customers where username = '" + mail + "'";  
		try {  
			prepStmt = con.prepareStatement(strSql);  
			rs = prepStmt.executeQuery();  
			if (rs.next()) {  
				flag = false;  
			} else {  
				flag = true;  
			}  
			cm.closeResultSet(rs);  
			cm.closePrepStmt(prepStmt);  
			cm.closeConnection(con);  
			return flag;  
		} catch (SQLException e) {  
			e.printStackTrace();  
		} finally {  
			cm.closeAllDB(con, prepStmt, rs);  
		}  
		return false;  
	}  
  
	private boolean validateCustomerParameter(Customer customer) {  
		if (customer.getUserName().length() < 1) {  
			return false;  
		}  
		if (customer.getPassword().length() < 1) {  
			return false;  
		}  
		if (customer.getMail().length() < 1) {  
			return false;  
		}  
		return true;  
	}  
  
	/**  
	 * 数据库插入  
	 *   
	 * @param customer  
	 * @return false if insert faild  
	 */  
	private boolean execute(Customer customer) {  
		ConnectionManager cm = null;  
		Connection con = null;  
		PreparedStatement prepStmt = null;  
		String strSql = null;  
		int flag = 0;  
  
		cm = new ConnectionManager("forum.properties");  
		con = cm.getConnection();  
		strSql = "insert into customers (customerid, username, password, mail, registered, avatar, signature, isnotify, logon) values ("  
				+ "'"  
				+ customer.getCustomerID()  
				+ "', '"  
				+ customer.getUserName()  
				+ "', '"  
				+ customer.getPassword()  
				+ "', '"  
				+ customer.getMail()  
				+ "', "  
				+ customer.getRegistered()  
				+ ", '"  
				+ customer.getAvatar()  
				+ "', '"  
				+ customer.getSignature()  
				+ "', "  
				+ customer.getIsnotify() + ", " + customer.getLogon() + ")";  
//		System.out.println("Register: " + strSql);  
		try {  
			prepStmt = con.prepareStatement(strSql);  
			flag = prepStmt.executeUpdate();  
			cm.closePrepStmt(prepStmt);  
			cm.closeConnection(con);  
			if (flag == 1){  
				return true;  
			}else{  
				return false;  
			}  
		} catch (SQLException e) {  
//			e.printStackTrace();  
			return false;  
		}finally{  
			cm.closeAllDB(con, prepStmt);  
		}  
	}  
  
	/**  
	 * 如果数据库插入失败 则删除图片  
	 * @param args  
	 */  
	private void delThePicture(String avatar){  
		File f = null;  
		f = new File(avatar);  
		if (f.isFile()){  
			f.delete();			  
		}  
	}  
	  
	public static void main(String[] args) {  
	}  
}  
  

_________________
me was me
View profile  Send private message
LH_13

Posts: 30
Posted: 01/19/2007, 3:28 AM

why you do not use standart CCS fileUploadComonent???
It allow all neede features.
Disabe size control is musch easy than write new own...


_________________
Sorry my english!
View profile  Send private message
privatemiao


Posts: 17
Posted: 01/19/2007, 3:35 AM

the standart upload com need bigger memory and slowness speed
it less read the stream twice, but my com read the stream one time and less memory .
you can see it
_________________
me was me
View profile  Send private message

Add new topic Subscribe to topic   


These are Community Forums for users to exchange information.
If you would like to obtain technical product help please visit http://support.yessoftware.com.

Internet Database

Visually create Web enabled database applications in minutes.
CodeCharge.com

Home   |    Search   |    Members   |    Register   |    Login


Powered by UltraApps Forum created with CodeCharge Studio
Copyright 2003-2004 by UltraApps.com  and YesSoftware, Inc.