fileupload

原创 2012年03月30日 21:56:25

commons-fileupload需要commons-io支持。

1. 创建一个file,如果它的父节点不存在,则要mkdirs,然后createNewFile,否则直接createNewFile。

2. 用一个multipart/form-data的form,除了file类型的,普通文本类型的也可以,虽然request.getParameter得不到,但是通过fileupload可以得到。

3. upload.parseRequest(request).iterator()只能用一次,解决办法是List list = upload.parseRequest(request); list.iterator();分段进行,parse一次,iterator自然可以用多次。

package com.kiln;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
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.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class Upload
 */
public class Upload extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public Upload() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	private void createFile(File file){
		if(!file.exists()){
			String ps = file.getParent();
			if(ps!=null){
				File p = new File(ps);
				if(!p.exists())
					p.mkdirs();
			}
			try {
				file.createNewFile();
			} catch (IOException e) {				
				e.printStackTrace();
			}
		}		
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		boolean isMultipart = ServletFileUpload.isMultipartContent(request);		
		if (isMultipart) {

			
			FileItemFactory factory = new DiskFileItemFactory();
			ServletFileUpload upload = new ServletFileUpload(factory);

			Iterator items;
			response.setContentType("text/html");
			response.setCharacterEncoding("utf-8");
			PrintWriter out = response.getWriter();
			try {
				String id = null;
				List list =  upload.parseRequest(request);
				items = list.iterator();
				while(items.hasNext()){
					FileItem item = (FileItem) items.next();
					if(item.isFormField()){
						id = item.getString();
						break;	
					}									
				}
				if(id==null||id.equals("")){
					out.println("{res:false}");
					out.println();
					return;
				}
				items = list.iterator();
				while (items.hasNext()) {
					FileItem item = (FileItem) items.next();
					if (!item.isFormField()) {
						
						String name = item.getName();
						String fileName = name.substring(
								name.lastIndexOf('/') + 1, name.length());
						String extend = fileName.substring(fileName.lastIndexOf('.'),fileName.length());						
						Calendar c = Calendar.getInstance();
						c.setTime( new Date());
						StringBuffer fN = new StringBuffer(id);
						fN.append(c.get(Calendar.YEAR));
						fN.append(c.get(Calendar.MONTH));
						fN.append(c.get(Calendar.DAY_OF_MONTH));
						fN.append(c.get(Calendar.HOUR_OF_DAY));
						fN.append(c.get(Calendar.MINUTE));
						fN.append(c.get(Calendar.SECOND));
						fN.append(extend);
						fileName = fN.toString();
						String path = request.getRealPath("file")						
								+ File.separatorChar + fileName;						
						File uploadedFile = new File(path);
						createFile(uploadedFile);
						item.write(uploadedFile);			
						String returnPath = "http://localhost:8080"+request.getContextPath()+"/file/"+fileName;
						out.print("{url:"+returnPath+"}");
						out.close();
					}

				}

			} catch (Exception e) {
				e.printStackTrace();
			}
		}

	}
}


相关文章推荐

richfaces fileupload组件的使用方法

richfaces fileupload组件是用于文件批量上传的组件,用他做JSF的文件上传是非常方便和高效的.但有些问题需要注意,配置方法如下 1、先修改web.xml配置文件   Ajax...

使用servlet实现文件上传(用common-fileUpload和common-io包)

用servlet实现文件的上传,这里用到Apache的开源工具:common-fileupload。因为common-fileupload依赖于common-io,所以需要同时下载两个包。 co...
  • FateHJ
  • FateHJ
  • 2016年04月03日 15:07
  • 2037

Spring MVC 4 使用常规的fileupload上传文件(带源码)

【本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看。源码下载地址在文章末尾。】 【翻译 by 明明如月 QQ 605283073】 上一篇:  Spri...

fileupload上传文件

jsp页面 用户名: 密 码: 文件1: 文件2: 后台servlet 1 2public class UploadServlet e...
  • lsh6688
  • lsh6688
  • 2013年06月30日 19:50
  • 7659

解决asp.net中Fileupload上传在IE不同版本下显示图片

http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> http://www.w3.org/1999/xhtml">     修改设...

《Java》----详解用apache的commons-fileupload组件实现文件上传

在web开发中,文件上传功能是很普遍的,我们最常见的就是上传图片了,还有上传Excel,今天小编给大家分享一下利用apache的组件实现文件上传功能。     文件上传总体思路     我们想要将磁盘...

fileupload上传中文文件名时乱码问题

昨天让这个乱码问题弄了很久,一大早就开始想要怎么解决才好。 很简单上传页面,jsp上传页面代码 1    form action="/struts2/UploadServlet" method...

struts2 使用 jakarta 上传文件时commons fileupload的异常捕捉(转自alfred.w)

struts2 使用 jakarta 上传文件时commons fileupload的异常捕捉(转自alfred.w) 问题:         struts2 使用jakarta ...

jquery.fileupload.js插件使用--多视频或音频上传预览

一、前台代码: jquery.fileupload.js使用测试 .bar { mar...
  • smm188
  • smm188
  • 2016年02月26日 16:02
  • 1831

基于jquery的fileupload上传控件 带进度条、支持多上传、拖拽上传 下载即可用 十分强大 有图

基于jquery的fileupload上传控件 带进度条、支持多上传、拖拽上传 下载即可用 十分强大 有图 源代码下载地址:http://www.zuidaima.com/share/16169345...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:fileupload
举报原因:
原因补充:

(最多只允许输入30个字)