`

jsp上传文件

    博客分类:
  • jsp
阅读更多
1. jsp上传
Notice:
1. form表单 method 属性必须设置为 POST 方法 ,不能使用 GET 方法
2. form表单 enctype 属性需要设置为 multipart/form-data
3. form表单 action 属性需要设置为提交到后台处理文件上传的jsp文件地址或者servlet地址。例如 uploadFile.jsp 程序文件用来处理上传的文件
4. 上传文件元素需要使用 <input .../> 标签,属性设置为 type="file"。如果需要上传多个文件,可以在 <input .../>标签中设置不同的名称

Steps
    首先我们先定义文件上传后存储在服务上的位置,你可以将路径写在你的程序当中,或者我们可以在web.xml配置文件中通过设置 context-param 元素来设置文件存储的目录
	<context-param>
		<param-name>file_upload_dir</param-name>
		<param-value>F:\files_uploaded</param-value>
		<description>Location to store uploaded files</description>
	</context-param>	

    依赖 FileUpload, 所以你需要在你的classpath中引入最新的 commons-fileupload.x.x.jar 包文件
    FileUpload 依赖 Commons IO, 所以你需要在你的classpath中引入最新的 commons-io-x.x.jar
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.2.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-io</artifactId>
			<version>1.3.2</version>
		</dependency>

    在测试以下实例时,你需要上传确认上传的文件大小小于 maxFileSize 变量设置的大小 ,否则文件无法上传成功
    确保你已经创建了目录F:\files_uploaded

fileupload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Up load file</title>
</head>
<body>
	<form action="processFileUpload.jsp" method="post" enctype="multipart/form-data">
		<input type="file" size="50" name="fileSelected">
		<input type="submit" value="upload">
	</form>
</body>
</html>


processFileUpload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>    
<%@ page import="java.io.*,java.util.*,javax.servlet.*" %>   
<%@ page import="org.apache.commons.fileupload.*" %> 
<!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>Insert title here</title>
</head>
<body>
<%
	File file;
	int maxSize = 1024*1024*1024;
	int maxMemSize = 1024*1024;
	ServletContext ctx = pageContext.getServletContext();
	String filePath = ctx.getInitParameter("file_upload_dir");
	String contentType = request.getContentType();
	if(ServletFileUpload.isMultipartContent(request)) {
		DiskFileItemFactory factory = new DiskFileItemFactory();
		factory.setSizeThreshold(maxMemSize); //设置内存中存储文件的最大值
		factory.setRepository(new File("F:\\tmp"));
		ServletFileUpload servlet = new ServletFileUpload(factory);
		servlet.setSizeMax(maxSize); //设置最大的上传文件大小
		
		try {
			List items = servlet.parseRequest(request);
			out.println(items.size());
			Iterator it = items.iterator();
			while(it.hasNext()) {
				FileItem item = (FileItem) it.next();
				String fieldName = item.getFieldName();
				String fileName = item.getName();
				boolean isInMemory = item.isInMemory();
				long sizeInBytes = item.getSize();
				
				if(fileName.lastIndexOf("\\") >= 0) {
					file = new File(filePath, fileName.substring(fileName.lastIndexOf("\\")));
				} else {
					file = new File(filePath, fileName.substring(fileName.lastIndexOf("\\")+1));
				}
				
				item.write(file);
				out.println("Uploaded file: " + fileName);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
%>
</body>
</html>


NOTE:
    代码copy自网络,起初,processFileUpload.jsp中的List items = servlet.parseRequest(request);得到的总是空集合,网上也有很多遇到这种情况的,原因 在fileupload.jsp: name="fileSelected" , 如果没有name标记,commons fielupload不会作处理
    servlet.setHeaderEncoding("UTF-8");中文名不会乱码

2. servlet上传
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import javax.servlet.ServletContext;
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;

public class FileUploadServlet extends HttpServlet {

	private static final long serialVersionUID = 849325874174997377L;
	private static final int sizeThreshold = 1024*1024*1024;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println(".....doGet.....");
		super.doGet(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		DiskFileItemFactory factory = new DiskFileItemFactory();
		ServletContext ctx = this.getServletContext();
		String filePath = ctx.getInitParameter("file_upload_dir");
		factory.setRepository(new File(filePath));
		factory.setSizeThreshold(sizeThreshold);
		ServletFileUpload upload = new ServletFileUpload(factory);
		
		try {
			@SuppressWarnings("unchecked")
			List<FileItem> list = upload.parseRequest(req);
			for(FileItem item : list) {
				String name = item.getFieldName();
				if(item.isFormField()) {
//					String value = item.getString();
//					req.setAttribute(name, value);
				} else {
					String value = item.getName();
					String fileName = value.substring(value.indexOf("\\")+1);
					req.setAttribute(name, fileName);
					OutputStream os = new FileOutputStream(new File(filePath, fileName));
					InputStream is = item.getInputStream();
					
					byte[] buff = new byte[1024];
					System.out.println("The length of " + value + " is " + item.getSize());
					
					int length = 0;
					while((length = is.read(buff)) != -1) {
						os.write(buff, 0, length);
					}
					is.close();
					os.close();
				}
			}
		} catch (FileUploadException e) {
			e.printStackTrace();
		}
		
		req.getRequestDispatcher("pages/upload_result.jsp").forward(req, resp);
	}

}


import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodingFilter implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println("init EncodingFilter....");
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		request.setCharacterEncoding("utf-8");
		System.out.println("set the encoding to be utf-8 in EncodingFilter...");
		chain.doFilter(request, response);
	}

	@Override
	public void destroy() {
		System.out.println("destroy EncodingFilter....");
	}

}


fileupload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Up load file</title>
</head>
<body>
	<form action="<%=request.getContextPath() %>/fileupload" method="post" enctype="multipart/form-data">
		<input type="file" size="50" name="fileSelected">
		<input type="submit" value="upload">
	</form>
</body>
</html>


upload_result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
<h3>File <%=request.getAttribute("fileSelected") %> uploaded successfully.</h3>
</body>
</html>


web.xml
<web-app>
	<display-name>Archetype Created Web Application</display-name>
	
	<context-param>
		<param-name>file_upload_dir</param-name>
		<param-value>F:\files_uploaded</param-value>
		<description>Location to store uploaded files</description>
	</context-param>	

	 <filter>
	 	<filter-name>EncodingFilter</filter-name>
	 	<filter-class>com.jesse.jsp.filter.EncodingFilter</filter-class>
	 </filter>
	 
	 <filter-mapping>
	 	<filter-name>EncodingFilter</filter-name>
	 	<url-pattern>/*</url-pattern>
	 </filter-mapping>
	 
	 <servlet>
	 	<servlet-name>fileUploadServlet</servlet-name>
	 	<servlet-class>com.jesse.jsp.servlet.FileUploadServlet</servlet-class>
	 </servlet>
	 
	 <servlet-mapping>
	 	<servlet-name>fileUploadServlet</servlet-name>
	 	<url-pattern>/fileupload</url-pattern>
	 </servlet-mapping>
</web-app>
分享到:
评论

相关推荐

    jsp上传文件Demo

    【JSP上传文件Demo】是基于Java服务器页面(JSP)技术实现的一种文件上传功能的示例。在Web开发中,文件上传是一个常见的需求,例如用户上传头像、提交附件等。`SmartUpload`是一个流行的Java库,专门用于处理文件...

    JSP上传文件(有进度条)可上传大文件

    JSP上传文件(有进度条)可上传大文件 网上有很多文章都是jspsmart,由于jspsmart直接在内存中操作数据,如果上传大文件或多台计算机上传的话会出错,还有一些方法传得比较慢。 为了方便上传文件,本人写了一个传输...

    jsp上传文件样例

    "jsp上传文件样例"这个主题涉及到的是如何使用JSP处理客户端上传的文件,这在许多Web应用中是常见的需求,比如用户注册、照片分享、文档提交等场景。下面将详细介绍这个知识点。 1. **文件上传原理**: 文件上传的...

    Jsp上传文件所需jar包

    "Jsp上传文件所需jar包"这一主题聚焦于在JSP环境中实现文件上传所需的依赖库。在这个过程中,我们需要重点关注两个主要组件:Servlet和相关的第三方库。 首先,Servlet是Java EE规范的一部分,它允许服务器端处理...

    jsp上传文件完整版

    "jsp上传文件完整版"这个标题表明我们将讨论一个全面的教程或示例,涵盖了从接收文件到保存在服务器上的整个过程。描述中的重复进一步强调了这是关于JSP文件上传的全面指南。 JSP文件上传主要涉及到以下几个关键...

    一个jsp上传文件、下载文件的代码

    在这个“一个jsp上传文件、下载文件的代码”示例中,我们主要探讨的是如何在MyEclipse开发环境中利用JSP实现文件的上传和下载功能。 文件上传是Web应用中常见的功能,常用于让用户提交图片、文档等数据。在JSP中,...

    jsp 上传文件源码

    【标题】"jsp 上传文件源码"涉及的是在Java Web开发中使用JSP进行文件上传的技术。在Java Web应用程序中,用户有时需要上传图片、文档等文件到服务器,这时就需要借助于像JSP这样的技术来实现。JSP(JavaServer ...

    jsp上传文件模块代码,测试成功的

    "jsp上传文件模块"是JSP中常见的功能,它允许用户通过Web界面上传文件到服务器。这个模块在很多应用场景中非常实用,比如论坛、博客、同学录等,其中"同学录相片上传"就是一个具体的例子,它能让用户上传个人照片到...

    jsp上传文件的组件

    首先,我们需要了解的是"jsp上传文件的组件"。在这个场景中,`jspsmart.jar`是一个关键的组件,它是一个专门用于处理文件上传的库。Jspsmart是由SmartUpload类组成的,这是一个开源的JSP文件上传解决方案,提供了...

    jsp上传文件显示上传进度

    在JSP中,我们通常会创建一个表单让用户选择要上传的文件,然后通过Servlet或JSP后台处理文件上传。 要实现文件上传进度的显示,我们需要以下步骤: 1. **配置Servlet**:在web.xml中配置一个专门处理文件上传的...

    jsp上传文件所需jar包.zip

    标题"jsp上传文件所需jar包.zip"指的是这个压缩包中包含了用于JSP文件上传的必要依赖。其中,`commons-fileupload-1.3.2.jar`是Apache Commons FileUpload的最新版本,它提供了解析HTTP请求中的多部分数据和处理文件...

    快速JSP上传文件

    这个"快速JSP上传文件"的主题就围绕这个核心展开。 首先,了解文件上传的基本流程: 1. 用户在表单中选择文件,表单以`multipart/form-data`编码类型提交。 2. 服务器端的Servlet接收到请求后,解析请求体中的多...

    使用jsp上传文件到服务器的具体方法

    5. **遍历上传文件**:使用SmartUpload提供的方法,你可以获取每个上传文件的信息,并进行进一步处理,如保存到服务器的特定位置: ```java int filesCount = smart.getFilesCount(); for (int i = 0; i ; i++) {...

    jsp上传文件带进度条(源码项目)

    综上所述,这个"jsp上传文件带进度条(源码项目)"展示了如何使用JSP、Java Servlet和JavaScript技术实现无刷新的文件上传功能,提供丰富的上传进度反馈,提升了用户体验。对于开发者来说,这是一个学习和研究文件上传...

    纯jsp上传文件到服务器(利用了struts)

    【标题】"纯jsp上传文件到服务器(利用了struts)"所涉及的知识点主要集中在Web开发领域,尤其是Struts框架的应用以及文件上传的实现。Struts是Apache组织下的一个开源项目,它是一个基于MVC(Model-View-Controller...

    jsp上传文件项目实例

    【JSP上传文件项目实例详解】 在Web开发中,用户经常需要上传文件,例如图片、文档等。在Java环境中,我们通常使用JSP(JavaServer Pages)来构建前端交互界面,结合Servlet处理后端逻辑。本项目实例将详细介绍如何...

    jsp上传文件的一些参考

    当我们谈到“jsp上传文件的一些参考”,这是一个关于如何在JSP中实现文件上传功能的主题。在实际应用中,文件上传功能通常用于让用户提交图片、文档等数据到服务器,比如用户注册时上传头像或者在线投稿等场景。 ...

    jsp上传文件cos资源

    【标题】"jsp上传文件cos资源"涉及到的主要技术是JavaServer Pages(JSP)与腾讯云对象存储服务(COS)。这是一个使用JSP技术实现文件上传,并将上传的文件存储到腾讯云COS上的解决方案。 **JSP(JavaServer Pages...

    jsp上传文件实例可以使用jsp上传图片,文档,等文件

    本实例主要探讨如何使用JSP来实现文件上传的功能,特别是针对图片、文档等类型的文件。文件上传是一个常用的需求,例如用户在网站上提交个人信息时可能需要上传头像或简历。以下将详细介绍如何使用JSP进行文件上传。...

Global site tag (gtag.js) - Google Analytics