Servlet上传图片并下载

前端

上传界面

<!-- 上传文件用post  有图片 表单传输数据的编码类型设置为多媒体格式 -->
<form action='/first/UploadServlet' method="post" enctype="multipart/form-data">
<input type="file" name="uploadFile1">
<input type="text" name='test1'>
<input type="text" name='test2'>
<input type="submit" value='上传'>
</form>>

跳转显示界面

<img src="<%=request.getAttribute("fn") %>" />

servlet

注意我们需要在Tomcat中鲜见一个虚拟路径

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
//		doGet(request, response);
		System.out.println("-------------");
		try {
			upload(request);
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//页面跳转
  request.getRequestDispatcher("/web/Demo5.jsp").forward(request,response);
	}
	}
//上传功能
	private void upload(HttpServletRequest request) throws FileUploadException, IOException {
		DiskFileItemFactory factory = new DiskFileItemFactory();
	    ServletFileUpload upload = new ServletFileUpload(factory);
	    List<FileItem> items = upload.parseRequest(request);//解析请求为一个集合
	    for(FileItem item:items) {
	    	System.out.println(item.isFormField());
	    	//判断表单中字段是否是普通元素 文件域不是普通元素
	    	if(item.isFormField()) {
	    		System.out.println(item.getFieldName());
	    		String val = item.getString();//得到普通表达元素的内容
	    		System.out.println(val);
	    	}else {
	    		System.out.println(item.getSize());
	    		if(item.getSize() == 0) {
	    		    continue;
	    		}
	    		InputStream is = item.getInputStream();//图片以字节流形式输入
	    		//表单名称  上传的文件名 可以根据getName提取后缀名
	    		byte[] b = new byte[1024 * 1024];
	    		int i = -1;
	    		System.out.println(item.getFieldName()+"  "+item.getName());
	    		String filename = item.getName();
	    		String name = "C:\\Users\\yan\\Pictures\\Camera Roll\\";
	    		filename = UUID.randomUUID().toString()+filename.substring(filename.indexOf("."));
	    		//生成唯一文件名
	    		FileOutputStream fw = new FileOutputStream(name + filename);
	    		while(-1 != (i = is.read(b))) {
	    			fw.write(b,0,i);
	    		}
	    		fw.flush();
	    		fw.close();
	    		is.close();
 //在request域中存放自定义的名称和 虚拟路径名+上传过程中产生出来的文件名
       request.setAttribute("fn", "/test/"+filename);
	    	}
	    } 
	}

猜你喜欢

转载自blog.csdn.net/NuanShuTT/article/details/108103152