文件上传

1.新建项目,将commons-fileupload-1.3.3.jar和commons-io-2.6.jar两个包放入lib中

2.设置表单的enctype属性<form enctype="multipart/form-data" method="post"><input type="file" name="fileUpload"/></form>

3.新建两个文件夹,临时文件夹temp;上传文件位置upload;

这是单个文件上传

代码如下:

SingleFileUpload.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>
<script src="js/FileUploadJs.js"></script>
<style type="text/css">
	span{color:red;}
</style>
</head>
<body>
<span>${msg }</span>
	<form action="SingleFileUploadServlet" method="post" enctype="multipart/form-data">
		<table style="text-align: center;">
			<tr>
				<td>用户名</td>
				<td><input type="text" name="username" /></td>
			</tr>
			<tr>
				<td>密码</td>
				<td><input type="password" name="password" /></td>
			</tr>
			<tr>
				<td><input type="file" name="file" id="file" onchange="fileup(this);" /></td>
				<td><input type="submit" value="确定上传"/></td>
			</tr>
		</table>
	</form>
</body>
</html>

SingleFileUploadServlet

package com.sfupload.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
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.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

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

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public SingleFileUploadServlet() {
		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
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//获取文件夹的目录
		String  uploadPath = this.getServletContext().getRealPath("/upload");
		String  tempPath = this.getServletContext().getRealPath("/temp");
		
		//步骤1:创建DiskFileItemFactory对象  临时目录
		DiskFileItemFactory disk = new DiskFileItemFactory(1024*10,new File(tempPath));//文件大小
		
		//步骤2:创建ServletFileUpload对象  接收临时文件disk
		ServletFileUpload upload = new ServletFileUpload(disk);
		
		//限制整个请求的大小
		upload.setSizeMax(1024*1024);//最大bit(2M)
		
		//步骤3:调用parseRequest()方法  转换请求
		try {
			List<FileItem> fileItems = upload.parseRequest(request);
			for (FileItem fileItem : fileItems) {
//				System.out.println(fileItem);
				if(fileItem.isFormField()){//是否为普通的表单数据
					//获取名
					String name = fileItem.getFieldName();
					String name2 = fileItem.getName();
//					System.out.println(name);
					
					//获取值
					String value = fileItem.getString("utf-8");//控制获取到的值是中文
//					System.out.println(value);
				}else{
					//获取名
					String name = fileItem.getName();//获取扩展名
//					System.out.println(name);
					//获取文件的扩展名(最后一个.之后的内容)
					String nameExt = name.substring(name.lastIndexOf(".")+1);
//					System.out.println("扩展名是:"+nameExt);
					
					List<String> names = new ArrayList<String>();
					names.add("jpg");
					names.add("gif");
					names.add("jpeg");
					names.add("png");
					
					if(!(names.contains(nameExt))){//文件格式不合法     只能jpg、gif、jpeg三个格式
						//设置提示信息
						request.setAttribute("msg", " 只能jpg、gif、jpeg、png四个格式");
						request.getRequestDispatcher("SingleFileUpload.jsp").forward(request, response);
					}else{
						//输入流对象
						InputStream is = fileItem.getInputStream();
						//文件关联对象
						File file = new File(uploadPath + "/" + name);
						//输出流对象
						FileOutputStream fos = new FileOutputStream(file);
						//复制
						byte[] buf = new byte[1024];
						int len =  0;
						while((len=is.read(buf))!=-1){//-1是末尾
							fos.write(buf, 0, len);
						}
						
						//关流
						fos.flush();//刷新
						fos.close();
						is.close();
					}
				}
			}
		} catch(FileUploadBase.SizeLimitExceededException e){
			//设置提示信息
			request.setAttribute("msg", "请求超过了设定的最大值");
			request.getRequestDispatcher("SingleFileUpload.jsp").forward(request, response);
		}catch (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

js代码(这个是网上查的,可参考:http://www.haorooms.com/post/js_inputfileupload)

var isIE = /msie/i.test(navigator.userAgent) && !window.opera;

function fileup(target) {
	var fileSize = 0;
	if(isIE && !target.files) {
		var filePath = target.value;
		var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
		var file = fileSystem.GetFile(filePath);
		fileSize = file.Size;
	} else {
		fileSize = target.files[0].size;
	}
	var size = fileSize / 1024;
	if(size > 2000) {
		alert("附件不能大于2M");
		target.value = "";
		return
	}
	var name = target.value;
	var fileName = name.substring(name.lastIndexOf(".") + 1).toLowerCase();
	if(fileName != "jpg" && fileName != "jpeg" && fileName != "pdf" && fileName != "png" && fileName != "dwg" && fileName != "gif") {
		alert("请选择图片格式文件上传(jpg,png,gif,dwg,pdf,gif等)!");
		target.value = "";
		return
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值