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();
			}
		}

	}
}


FileUpload控件优化样式

演示图 - IE8 演示图 - Chrome 按钮图片 - sprites_btn23.png  代码块 - CSS:/*==== FileUpload ====*...
  • qq285679784
  • qq285679784
  • 2015年10月19日 11:58
  • 2498

FileUpload控件的用法

FileUpload控件是一个很重要的控件,它被Web服务器最终解释为形如“”这样的普通HTML控件。它有如下常见属性: 属性名 数据类型 说明 FileBytes byte[] 上传的文件内容的字节...
  • yingjiell
  • yingjiell
  • 2010年10月28日 13:43
  • 22776

ASP.NET初学笔记:FileUpload控件

FileUpLoad控件用于用户向Web应用程序上传文件。文件上传后,可以把文件保存在任意地方,通常把文件保存在文件系统或数据库。向页面添加FileUpLoad控件会自动地为服务器的标签添加encty...
  • wangliang262359
  • wangliang262359
  • 2010年10月10日 21:36
  • 4541

FileUpload上传控件用法详解--来自MSDN帮助文档

FileUpload 类显示一个文本框控件和一个浏览按钮,使用户可以选择客户端上的文件并将它上载到 Web 服务器。用户通过在控件的文本框中输入本地计算机上文件的完整路径(例如,C:/MyFi...
  • zhangchuccc
  • zhangchuccc
  • 2010年06月07日 16:21
  • 9151

fileupload上传时传递参数

jQuery.fileupload 传递参数
  • weiyongliang_813
  • weiyongliang_813
  • 2015年11月24日 15:43
  • 4520

fileupload上传显示进度

无标题页
  • happy664618843
  • happy664618843
  • 2010年10月21日 14:53
  • 3162

图片上传之fileupload

最近学习了图片上传这个功能,这个功能比较常见,因此来整理一下,了解上传的基本原理,以便后期遇到图片上传功能可以很快上手。        要说图片上传,我们先来说一下图片上传后存储的两种方式:一种是将图...
  • lvshihua
  • lvshihua
  • 2015年05月31日 14:53
  • 2687

更改FileUpload控件中browse按钮的显示文字

1. 
  • encienqi
  • encienqi
  • 2009年11月17日 17:22
  • 4610

bootstrap fileupload相关

前台页面代码: js: $("#input-1").fileinput({//这里的id是input标签的id        uploadUrl: '/appr/upload/doFi...
  • twj18744035448
  • twj18744035448
  • 2016年03月09日 14:04
  • 1170

FileUpload控件文件上传、扩容、限制文件类型及上传验证

首先,文件上传需要使用FileUpload控件,针对于此控件我们来进行一系列的操作。 1、将选中文件上传到目标位置: //获取上传文件的文件名称 string name = File...
  • xianglikai1
  • xianglikai1
  • 2016年07月30日 22:18
  • 1428
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:fileupload
举报原因:
原因补充:

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