`

servlet文件上传

    博客分类:
  • java
阅读更多

今天在http://blog.csdn.net/hzc543806053/article/details/7524491看到一篇servlet文件上传的blog,很详细,转载下来留着自己用。

一、Servlet实现文件上传,需要添加第三方提供的jar包

下载地址:

1) commons-fileupload-1.2.2-bin.zip      :   点击打开链接

2) commons-io-2.3-bin.zip                       :    点击打开链接    

 

接着把这两个jar包放到 lib文件夹下

 

二:

文件上传的表单提交方式必须是POST方式,

编码类型:enctype="multipart/form-data",默认是 application/x-www-form-urlencoded

比如:<form action="FileUpLoad"enctype="multipart/form-data"method="post">


 

三、举例

1.fileupload.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 'fileupload.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 默认是 application/x-www-form-urlencoded -->
     <form action="FileUpLoad" enctype="multipart/form-data" method="post" >
        
               用户名:<input type="text" name="usename"> <br/>
               上传文件:<input type="file" name="file1"><br/>
              上传文件: <input type="file" name="file2"><br/>
              <input type="submit" value="提交"/>
     
     </form>
     
     
     
  </body>
</html>

 2.实际处理文件上传的 FileUpLoad.java

package com.servlet.fileupload;

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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * 
 * @author Administrator
 * 文件上传
 * 具体步骤:
 * 1)获得磁盘文件条目工厂 DiskFileItemFactory 要导包
 * 2) 利用 request 获取 真实路径 ,供临时文件存储,和 最终文件存储 ,这两个存储位置可不同,也可相同
 * 3)对 DiskFileItemFactory 对象设置一些 属性
 * 4)高水平的API文件上传处理  ServletFileUpload upload = new ServletFileUpload(factory);
 * 目的是调用 parseRequest(request)方法  获得 FileItem 集合list ,
 *     
 * 5)在 FileItem 对象中 获取信息,   遍历, 判断 表单提交过来的信息 是否是 普通文本信息  另做处理
 * 6)
 *    第一种. 用第三方 提供的  item.write( new File(path,filename) );  直接写到磁盘上
 *    第二种. 手动处理  
 *
 */
public class FileUpLoad extends HttpServlet {

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");	//设置编码
		
		//获得磁盘文件条目工厂
		DiskFileItemFactory factory = new DiskFileItemFactory();
		//获取文件需要上传到的路径
		String path = request.getRealPath("/upload");
		
		//如果没以下两行设置的话,上传大的 文件 会占用 很多内存,
		//设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同
		/**
		 * 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上, 
		 * 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem 格式的 
		 * 然后再将其真正写到 对应目录的硬盘上
		 */
		factory.setRepository(new File(path));
		//设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室
		factory.setSizeThreshold(1024*1024) ;
		
		//高水平的API文件上传处理
		ServletFileUpload upload = new ServletFileUpload(factory);
		
		
		try {
			//可以上传多个文件
			List<FileItem> list = (List<FileItem>)upload.parseRequest(request);
			
			for(FileItem item : list)
			{
				//获取表单的属性名字
				String name = item.getFieldName();
				
				//如果获取的 表单信息是普通的 文本 信息
				if(item.isFormField())
				{					
					//获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的
					String value = item.getString() ;
					
					request.setAttribute(name, value);
				}
				//对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些
				else
				{
					/**
					 * 以下三步,主要获取 上传文件的名字
					 */
					//获取路径名
					String value = item.getName() ;
					//索引到最后一个反斜杠
					int start = value.lastIndexOf("\\");
					//截取 上传文件的 字符串名字,加1是 去掉反斜杠,
					String filename = value.substring(start+1);
					
					request.setAttribute(name, filename);
					
					//真正写到磁盘上
					//它抛出的异常 用exception 捕捉
					
					//item.write( new File(path,filename) );//第三方提供的
					
					//手动写的
					OutputStream out = new FileOutputStream(new File(path,filename));
					
					InputStream in = item.getInputStream() ;
					
					int length = 0 ;
					byte [] buf = new byte[1024] ;
					
					System.out.println("获取上传文件的总共的容量:"+item.getSize());

					// in.read(buf) 每次读到的数据存放在   buf 数组中
					while( (length = in.read(buf) ) != -1)
					{
						//在   buf 数组中 取出数据 写到 (输出流)磁盘上
						out.write(buf, 0, length);
					    
					}
					
					in.close();
					out.close();
				}
			}
			
			
			
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (Exception e) {
			// TODO Auto-generated catch block
			
			//e.printStackTrace();
		}
		
		
		request.getRequestDispatcher("filedemo.jsp").forward(request, response);
		

	}

}

 

System.out.println("获取上传文件的总共的容量:"+item.getSize()); 

 

3.filedemo.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 'filedemo.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>
    
    用户名:${requestScope.usename } <br/>
    文件:${requestScope.file1 }<br/>
    ${requestScope.file2 }<br/>
    <!-- 把上传的图片显示出来 -->
    <img alt="go" src="upload/<%=(String)request.getAttribute("file1")%> " />
    
    
    
  </body>
</html>

 

分享到:
评论

相关推荐

    servlet 文件上传下载例子

    在这个"Servlet 文件上传下载例子"中,我们将探讨如何使用Servlet实现文件的上传和下载功能,这对于构建一个简单的图片文件服务器至关重要。 1. **文件上传** - **MultipartRequest**: 在Servlet中,处理文件上传...

    Servlet文件上传所需的jar

    Servlet文件上传是Web开发中一个常见的需求,尤其是在处理用户通过表单提交的包含文件的数据时。在Java Servlet环境中,为了实现文件上传功能,通常需要引入两个关键的库:`commons-fileupload`和`commons-io`。这两...

    Servlet文件上传、下载及缩略图的生成

    在这个项目中,我们重点关注的是Servlet如何实现文件上传、下载和缩略图的生成。 首先,让我们深入理解文件上传的过程。在Web应用中,文件上传通常通过HTML表单实现,使用`&lt;input type="file" /&gt;`标签让用户选择要...

    tomcat+tomcat插件+servlet文件上传jar包

    标题中的“tomcat+tomcat插件+servlet文件上传jar包”揭示了本文将要讨论的是如何在Tomcat服务器上实现文件上传功能,并且利用相关的Tomcat插件进行辅助开发。Tomcat是一款广泛使用的开源Java Servlet容器,它实现了...

    servlet实现文件上传下载

    总结来说,实现Servlet文件上传下载需要理解Servlet生命周期、HTTP请求处理、多部分数据解析以及文件I/O操作。Apache Commons FileUpload库简化了这一过程,但理解其背后的原理对于解决可能出现的问题和优化性能至关...

    servlet 文件上传、下载

    总之,Servlet文件上传和下载是Web开发中的常见任务,理解并掌握其原理和实践方法对开发者来说至关重要。通过Servlet 3.0的新特性,我们可以更简洁地处理文件交互,同时配合前端库如AjaxFileUpload,提供流畅的用户...

    JSP+Servlet文件上传下载实例

    在Java Web开发中,JSP(Java...总的来说,JSP+Servlet实现文件上传下载涉及到HTML表单、Servlet请求处理、文件I/O以及第三方库的使用。通过这个实例,开发者可以掌握在Java Web环境中处理文件上传下载的基本流程。

    servlet 文件上传与下载的相关jar包

    在Servlet 3.0之前,Servlet API本身并不直接支持文件上传,因此,这个库成为了上传文件的标准工具。1.2.2版本是一个稳定且广泛使用的版本,它提供了以下关键功能: 1. **解析多部分数据**:FileUpload能够将HTTP...

    JSP+servlet文件上传简单案例

    在这个“JSP+servlet文件上传简单案例”中,我们将探讨如何利用这两种技术实现文件上传功能。文件上传是Web应用中常见的一种需求,例如用户可能需要上传个人头像、文档或者其他形式的数据。 首先,让我们了解一下...

    servlet文件上传演示

    本项目"Servlet文件上传演示"旨在展示如何利用Servlet实现文件上传功能,这对于任何需要用户上传图片、文档等资源的Web应用都是必不可少的。下面我们将深入探讨相关知识点。 一、Servlet简介 Servlet是Java EE...

    java servlet 文件上传

    接下来,我们将详细讲解如何使用Java Servlet和Commons FileUpload进行文件上传: 1. **创建HTML表单**: 首先,你需要在客户端创建一个HTML表单,指定`enctype="multipart/form-data"`,这是用于文件上传的特定...

    jsp,servlet上传下载文件

    jsp、servlet 文件上传下载技术详解 文件上传下载是 Web 应用中的一种常见需求,使用 jsp 页面和 servlet 实现文件上传下载是其中的一种解决方案。下面将详细介绍 jsp、servlet 文件上传下载技术。 文件上传下载...

    jsp+servlet文件上传数据库和下载

    在Java Web开发中,"jsp+servlet文件上传数据库和下载"是常见的功能需求,涉及到的主要技术包括JSP(JavaServer Pages)、Servlet、文件处理以及数据库操作。以下将详细阐述这些知识点。 1. JSP(JavaServer Pages...

    Servlet文件上传和下载

    JavaServlet文件上传和下载,java初学者笔记!

    servlet文件上传和下载

    总结,Servlet文件上传和下载是Java Web开发中必不可少的功能。理解和熟练掌握这些技术,有助于构建更健壮、安全的Web应用程序。在实际应用中,结合最佳实践和安全措施,可以确保系统的稳定性和用户数据的安全。

    通过Servlet文件上传理解Struts2文件上传原理(附源码)

    总结来说,Servlet文件上传是基础,而Struts2在此基础上提供了一套完整的解决方案,包括拦截器、Action支持、结果类型等。理解Servlet的实现有助于我们更好地利用Struts2的文件上传功能,并能够根据需求进行定制。在...

    servlet文件上传(含图片缩放功能)

    "servlet文件上传(含图片缩放功能)"的示例是利用Servlet实现用户上传图片,并且具备根据用户需求对上传图片进行缩放的功能。这个功能在很多网站如社交媒体、博客平台等非常常见,以便用户能够优化他们的图片大小,...

    jsp+servlet文件上传

    `JSP(JavaServer Pages)`和`Servlet`是Java EE平台上的两种核心技术,它们常用于构建动态Web项目,包括文件上传功能。本篇文章将深入讲解如何使用JSP和Servlet实现文件上传。 首先,我们需要了解`JSP`的基本概念...

    servlet文件上传与下载

    这篇博客"Servlet文件上传与下载"将深入探讨如何利用Servlet实现这两个功能。 首先,我们来了解一下Servlet的基本概念。Servlet是Java编程语言中的一类特殊对象,它运行在服务器端,扩展了Web服务器的功能,用于...

Global site tag (gtag.js) - Google Analytics