`

servlet fileupload上传文件

阅读更多

 

版权信息: 可以任意转载, 转载时请务必以超链接形式标明文章原文出处, 即下面的声明. 
原文出处:http://tbwuming.iteye.com/admin/blogs/1520140

 

1. maven依赖

<dependency>
	<groupId>commons-fileupload</groupId>
	<artifactId>commons-fileupload</artifactId>
	<version>1.2.2</version>
</dependency>
 

2. fileload处理类

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

import javax.servlet.http.HttpServletRequest;

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;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class FileUpload {
	private static final Logger logger = LoggerFactory.getLogger(FileUpload.class);

	private static final int DEFAULT_SIZE_THRESHOLD = 1 * 1024 * 1024;
	private static final long DEFAULT_MAX_FILE_SIZE = 8 * 1024 * 1024;

	private String uploadPath;
	private String tempPath;

	private Integer thresholdSize;
	private Long maxFileSize;

	private ServletFileUpload upload;

	// 初始化fileload
	public void init() {
		DiskFileItemFactory diskFactory = new DiskFileItemFactory();

		// 设置文件大小超过缓存时所存放的目录
		diskFactory.setRepository(new File(tempPath));

		// 设置缓存大小
		if (thresholdSize == null)
			diskFactory.setSizeThreshold(DEFAULT_SIZE_THRESHOLD);
		else
			diskFactory.setSizeThreshold(thresholdSize);

		upload = new ServletFileUpload(diskFactory);

		// 设置最大可上传的文件大小
		if (maxFileSize == null)
			upload.setSizeMax(DEFAULT_MAX_FILE_SIZE);
		else
			upload.setSizeMax(maxFileSize);
	}

	// 获取文件列表
	@SuppressWarnings("unchecked")
	public List<FileItem> getFileItems(HttpServletRequest request) {
		List<FileItem> fileItems = null;

		try {
			fileItems = (List<FileItem>) upload.parseRequest(request);
		} catch (FileUploadException e) {
			logger.error("process upload request error", e);
		}

		return fileItems;
	}

	public File process(PrintWriter out, FileItem item, Throwable throwable) {
		String filename = item.getName();

		logger.info("full filename:" + filename);

		if (StringUtils.isBlank(filename)) {
			logger.warn("filename {} is null", filename);
			return null;
		}

		// linux和windows路径分隔符不一样,因此处理
		int index = filename.lastIndexOf("/");
		if (index == -1)
			index = filename.lastIndexOf("\\");

		// 获取文件名
		filename = filename.substring(index + 1, filename.length());

		long fileSize = item.getSize();

		if (StringUtils.isBlank(filename) || fileSize == 0) {
			logger.warn("filename {} is empty", filename);
			return null;
		}

		// 写文件
		String pathname = uploadPath + "/" + filename;
		File uploadFile = new File(pathname);
		try {
			item.write(uploadFile);
		} catch (Exception e) {
			throwable = e;
			logger.error("write file error, file={}", pathname, e);
		}

		out.println(filename + " file upload complete ...");
		out.println("file size:" + fileSize + "\r\n");

		return uploadFile;
	}

	public void setUploadPath(String uploadPath) {
		this.uploadPath = uploadPath;
	}

	public void setTempPath(String tempPath) {
		this.tempPath = tempPath;
	}

	public void setThresholdSize(Integer thresholdSize) {
		this.thresholdSize = thresholdSize;
	}

	public void setMaxFileSize(Long maxFileSize) {
		this.maxFileSize = maxFileSize;
	}
	
}

 

3. servlet

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.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = -5562457977157562484L;
	private static final Logger logger = LoggerFactory.getLogger(UploadServlet.class);

	private FileUpload fileUpload;

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/plain;charset=utf-8");
		PrintWriter out = response.getWriter();

		List<FileItem> fileItems = (List<FileItem>) fileUpload.getFileItems(request);
		for (FileItem item : fileItems) {
			if (!item.isFormField()) {
				Throwable throwable = null;
				fileUpload.process(out, item, throwable);
			}
		}

		logger.info("upload file success");
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
			IOException {
		doGet(request, response);
	}

	public void setFileUpload(FileUpload fileUpload) {
		this.fileUpload = fileUpload;
	}

}
 

4. html 内容

<html> 
    <head>  
    	<title>上传文件</title>
    </head>
     
    <body> 
		<center>
			<form name="uploadForm" method="post" enctype="multipart/form-data" action="/upload">
				<table>
					<tr>
						<th colspan="2">
							上传文件
						</th>
					</tr>
					<tr>
						<td>
							Upload File:
						</td>
						<td>
							<input type="file" name="uploadFilename" size="30"/> 
						</td>
					</tr>
					<tr>
						<td align="center" colspan="2">					
							<input type="submit" name="submit" value="上传"> 
							&nbsp;&nbsp;&nbsp;&nbsp;
							<input type="reset" name="reset" value="重置"> 
						</td>
					</tr>
			</form> 
		</center>
    </body> 
</html>

 

 说明:

1). form提交模式需要是post模式,当页面传输内容比较大的时候一般时候post方式

2). 指明enctype为multipart/form-data类型

3). action中指定servlet访问相对路径

 

 

5. spring配置

<bean class="com.taobao.crawler.web.UploadServlet">
	<property name="fileUpload" ref="fileUpload" />
</bean>

<bean id="fileUpload" class="com.taobao.crawler.web.FileUpload" init-method="init">
        <property name="uploadPath" value="./config" />
	<property name="tempPath" value="./temp" />
</bean>

0
1
分享到:
评论

相关推荐

    servlet 文件上传下载例子

    - **MultipartRequest**: 在Servlet中,处理文件上传通常需要解析多部分表单数据,这可以通过Apache Commons FileUpload库或Java内置的`Part`接口实现。`MultipartRequest`是Apache Commons FileUpload库中的一个类...

    jsp+servlet+fileupload文件上传

    - **文件上传**:这是整个示例的核心功能,涉及到用户通过Web页面上传文件到服务器的过程。 **文件名解析:** "多文件上传--fileupload" 这个文件名表明压缩包内可能包含一个多文件上传的示例,具体使用了...

    使用commons-fileupload上传文件

    【使用commons-fileupload上传文件】 Apache Commons FileUpload是Apache组织的一个子项目,专注于处理HTTP文件上传。这个组件提供了一个简洁的API,使得开发者能够轻松地在Java应用中处理由浏览器发送的多部分...

    使用fileupload组件实现文件上传功能

    使用fileupload组件实现文件上传功能 FileUpload组件是Apache提供的一款文件上传组件,能够帮助我们轻松实现文件上传功能。下面我们将详细介绍使用FileUpload组件实现文件上传功能的步骤和要点: 首先,需要引入两...

    利用commons-fileupload上传组件上传文件(一)

    在Web开发中,允许用户上传文件是常见的需求,例如提交简历、上传图片或者分享文档。HTTP协议本身并不支持文件上传,但是通过MIME多部分/相关格式,我们可以将文件内容作为POST请求的一部分发送。Apache Commons ...

    文件上传下载源代码,FileUpload上传文件

    `FileUpload`通常指的是一个用于处理用户通过Web表单上传文件的组件或技术。本篇将详细讲解这一主题,包括文件上传的基本原理、使用FileUpload进行文件上传的步骤以及相关注意事项。 一、文件上传的基本原理 文件...

    设置FileUpload上传文件大小

    `FileUpload`是处理用户通过表单上传文件的关键组件。为了确保服务器稳定运行和资源管理,我们需要限制上传文件的大小,防止大文件耗尽服务器资源或导致内存溢出。本文将详细讲解如何在不同框架和环境中设置`...

    commons-fileupload实现文件上传

    可以通过`ServletFileUpload`设置最大上传文件大小和整个请求的总大小,以防止大文件上传导致服务器资源耗尽。 ```java upload.setSizeMax(maxFileSize); // 单个文件大小限制 upload.setFileSizeMax...

    commons-fileupload 文件上传 图片上传 demo

    4. **错误处理**:`commons-fileupload`还提供了处理上传过程中可能出现的错误和异常的机制,如文件大小超出限制、文件类型不合法等。 在`描述`中提到的`commons-fileupload-1.2.2.jar`和`commons-io.jar`是实现...

    fileupload文件上传下载代码示例

    在Java中,我们通常使用Servlet API或第三方库如Apache Commons FileUpload来处理文件上传。以下是一个基本的步骤: - 创建一个HTML表单,包含`&lt;input type="file"&gt;`元素,让用户选择文件。 - 使用Servlet接收POST...

    Java(Servlet)上传文件的demo

    本示例"Java(Servlet)上传文件的demo"提供了一个简单的文件上传功能,适用于初学者理解和实践。以下是对这个demo的详细解析: 1. **Servlet基本概念**: Servlet是一个Java类,遵循Servlet API规范,它扩展了...

    使用Common-fileUpload 上传文件 读取文件内容

    本篇文章将详细讲解如何使用`Commons-FileUpload`进行文件上传,并读取上传文件的内容。 首先,了解`Commons-FileUpload`的工作原理。它解析HTTP请求,将多部分的数据分割成单独的部分,这些部分可以是文本或文件。...

    jsp,servlet上传下载文件

    2. 服务器端处理上传文件:在服务器端,使用 servlet 处理上传的文件,并将其存储到指定的位置。 3. 文件下载:在服务器端,提供文件下载的接口,客户端可以通过该接口下载文件。 jsp 页面的实现 在 jsp 页面中,...

    commons-fileupload Servlet 上传/下载文件 示例代码

    在web.xml文件中,设置maxPostSize属性,允许上传文件的大小,例如: ```xml &lt;filter-name&gt;hiddenHttpMethodFilter &lt;filter-class&gt;org.springframework.web.filter.HiddenHttpMethodFilter &lt;filter-name&gt;...

    fileupload上传文件工具开发jar包

    总结来说,`fileupload上传文件工具开发jar包`是一个集成了Apache Commons `io`和`fileupload`的便捷工具,主要用于Java环境中处理HTTP文件上传。它提供了文件上传的解析、存储和处理能力,为开发者构建安全、高效的...

    JSP上传文件Servlet(Apache fileUpload)同时text文本

    本教程将详细介绍如何使用JSP和Servlet结合Apache Commons FileUpload库实现文件上传,并同时处理text文本。 首先,我们需要在项目中引入Apache Commons FileUpload库。通常,这可以通过在pom.xml文件中添加依赖来...

    利用org.apache.commons.fileupload上传多个文件

    Apache Commons FileUpload 是一个用于处理 HTTP 请求中多部分(multipart)数据的 Java 库,尤其适合上传文件。在本文中,我们将深入探讨如何利用该库实现多个文件的上传功能。 一、准备工作 在使用 Apache ...

    commons-fileupload文件上传实例

    该库提供了解析请求、存储上传文件和处理异常的能力。 **二、基本原理** 文件上传涉及到客户端和服务器之间的交互。用户通过HTML表单选择文件后,浏览器将文件封装成多部分数据,发送到服务器。FileUpload库负责...

    servlet实现的上传文件实例

    在这个"Servlet实现的上传文件实例"中,我们将深入探讨如何使用Servlet来处理客户端上传的文件。上传文件是Web应用程序中常见的功能,例如用户提交简历、上传图片或者共享文档等。以下是关于这个主题的详细知识点: ...

    java中common-fileupload 上传文件demo

    // 设置最大上传文件大小,-1表示无限制 ``` 4. **解析请求**:使用`FileUpload`对象的`parseRequest()`方法解析请求,这将返回一个`FileItemIterator`,我们可以遍历这个迭代器获取每个上传的文件项。 ```java ...

Global site tag (gtag.js) - Google Analytics