B/S架构下实现文件上传

public class FileUploadServlet extends HttpServlet {

	private Iuser user = new UserImpl();
	/**
	 *持久层接口,实现方法;
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doPost(request, response);
	}

	/**
	 *dopost里面实现文件上传方法   
	 * List list = upload.parseRequest(request);  这个的信息是按照表单的顺序来的,可以按照顺序进行提交;
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		ServletContext context = this.getServletContext();
		request.setCharacterEncoding("utf-8");
		//DiskFileItemFactory工厂类
		DiskFileItemFactory factory =new DiskFileItemFactory();
		//创建一个文件上传解析器
		ServletFileUpload upload =new ServletFileUpload(factory);
		//文件上传的编码格式
		upload.setHeaderEncoding("utf-8");
		
		try {
			//获取到文件的集合,解析request
			List list = upload.parseRequest(request);
			UserBean bean = new UserBean();
			//迭代器的使用方式,it.hasNext()和it.next()
			Iterator it = list.iterator();
			while(it.hasNext()){
				//获取到上传的文件对象
				FileItem fileItem = (FileItem) it.next();
				//上传过来的内容是表单里面文本内容还是文件对象
				if(fileItem.isFormField()){
					System.out.println("表单的属性:"+fileItem.getFieldName()+"表单的值:"+fileItem.getString("UTF-8"));
					//getParameter无法处理客户端提交过来的二进制数据
					/*String name = request.getParameter("name");
					System.out.println(name);*/
				}else{
					if(fileItem.getName()!=null && !"".equals(fileItem.getName())){
						System.out.println("文件的名字"+fileItem.getName());
						System.out.println("文件的大小"+fileItem.getSize());
						System.out.println("文件的类型"+fileItem.getContentType());
						
						//将文件写入到服务器。将文件名字放在数据库里面
						//将客户端传递过来的文件,文件是全路径,通过全路径获取到文件对象
						//c:\software\1.jpg  中得到1.jpg
						File tempFile = new File(fileItem.getName());
						//在创建一个文件对象,将对象写入到服务器。path为写入服务器路径,上下文获取tomcat工程包名;
						String path = context.getRealPath("/")+"upload";
						//  path:...\web_09\upload
						//  savaFileNmae:  调用方法变成:时间戳_1.jpg
						String savaFileNmae = changeName(tempFile.getName());
						File file = new File(path,savaFileNmae);
						//将源文件传入服务器内部新写的文件路径;
						fileItem.write(file);
						
						//将文件的名字写入到数据库  user.add将bean传给持久层记录下来
						bean.setUsername("xiaowang");
						bean.setPwd("123");
						bean.setImagrPath(savaFileNmae);
						user.add(bean);
						
					}else{
						System.out.println("文件名字不符合要求");
					}
				}
				
			}
		    request.getRequestDispatcher("/servlet/FindServlet").forward(request, response);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}

	}
	// 改变文件名的方法,避免同一个文件上传失败后无法上传;或其他同名文件;
	public String changeName(String fileName){
		long currentTime = System.currentTimeMillis();
		String newName = currentTime+"_"+fileName;
		return newName;
	}

}

JSP端代码用户信息填写提交

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</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>
  	<!-- enctype="multipart/form-data"表示当前表单的内容以二进制的形式发送给服务器 -->
    <form action="<%=request.getContextPath() %>/servlet/FileUploadServlet" method="post" enctype="multipart/form-data" >
        	上传人名:<input type="text" name="name" /><br/>      
          	上传文件:<input type="file" name="file" onchange="ck(this)"/><br/>
          	<img alt="" src="" id="img" width="200px">
          <input type="submit" name="submit" value="提交" />
     </form>
     
     
     <script>
     	function ck(obj){
     		console.info(obj);
     		var oimg = document.getElementById("img");
     		oimg.src=getFullPath(obj);
     	}
     	
     	function getFullPath(obj){
     		//通过js代码获取到当前选中文件对象。
     		//操作BOM对象,BOLB对象,读取原始数据类文件对象,可以获取到计算机本地的文件。
     		//如果非空则为真;
     		if(obj){ 
     			console.info("ok");
     			//判断IE浏览器
     			if(window.navigator.userAgent.indexOf("MSIE")>=1){
     				obj.select();
     				//返回在IE下面获取到图片路径  该方法有错误!
     				return document.selection.createRange().text;
     			}else if(window.navigator.userAgent.indexOf("Firefox")>=1){
     				if(obj.files){    
     					return window.URL.createObjectURL(obj.files.item(0));
     				}else{
     					return obj.value;
     				}
     			}
     		}
     	}
     	
     </script>
  </body>
</html>

Show端jsp代码; 将信息展示出来

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'show.jsp' starting page</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>
    <%-- <jsp:useBean id="bean" class="com.lovo.bean.UserBean" scope="request"></jsp:useBean> --%>
    
    <form>
    	<label>用户名:</label>
    	<input type="text" value='${requestScope.bean.username}' readonly="readonly"/>
    	<label>密码:</label>
    	<input type="text" value='${requestScope.bean.pwd}' readonly="readonly"/>
    	//将路径传给src,src获取读取路径;
    	<img src="/JavaWeb11/upload/${requestScope.bean.imagrPath }" width="100px"/>
    </form>
  </body>
</html>

封装上传servlet到工具中 FileUploadUtil.java

传参(request、context)
创建一个FileBean id必须有   文件名、文件大小、文件类型
全局变量:request、context、map<String,String>、list<FileBean>
返回参数:get方法获取MapList的数据内容;
将文件写到服务器,返回的参数servlet来写到数据库;


public class FileUploadServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doPost(request, response);
	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值