文件上传

  1. 另一个是commons-io.jar/下载地址:http://commons.apache.org/proper/commons-io/download_io.cgi

  2. html部分 :其中form表单method必须写post,enctype="multipart/form-data"表示以二进制的方式传递提交数据

<!DOCTYPE html>

<html>

<head>

<title>上传文件</title>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

</head>

<body>

<form method="post" action="updata.jsp" enctype="multipart/form-data">

<input type="text" name="nickname">

<input type="file" name="upfile">

<button type="submit">提交</button>

</form>

</body>

</html>

 

  1. jsp部分

     

request.setCharacterEncoding("utf-8");

if (request.getContentType() != null) {

DiskFileItemFactory factory = new DiskFileItemFactory();//当上传文件太大时,因为虚拟机能使用的内存时有限的,所以此时要通过临时文件来实现上传文件的保存

factory.setSizeThreshold(500);//设置是否使用临时文件的临界值(单位字节)

// factory.setRepository("路径");//设置文件路径

ServletFileUpload upload = new ServletFileUpload(factory);//创建一个新的文件上传对象

//设置上传单个文件的最大字节数为100M

upload.setFileSizeMax(100*1024 * 1024 );

//获取所有的表单数据

List<FileItem> items = upload.parseRequest(request);

String allowext="jpg|png|mp3";

for (FileItem form : items) {

if (form.isFormField()) {

out.print(form.getFieldName() + "=" + new String(form.getString().getBytes("iso-8859-1"), "utf-8")); //解决编码乱码问题

} else {

String filename=form.getName();

String ext=filename.substring(filename.lastIndexOf(".")+1);

if (allowext.indexOf(ext)==-1) {

throw new Exception("格式扩展名不符合");

}

if (form.getSize()>2*1024*1024) {

throw new Exception("文件过大");

}

String root=request.getServletContext().getRealPath("/");

String dirs="upfile/"+new SimpleDateFormat("yyMM/ddHH/").format(Calendar.getInstance().getTime());

File file=new File(root+dirs);

if (!file.exists()) {

file.mkdirs();

}

String name=filename+System.currentTimeMillis()+Math.random();

//转化成MD5加密格式

MessageDigest md=MessageDigest.getInstance("MD5");

md.update(name.getBytes());

String md5sString=new BigInteger(1,md.digest()).toString(16);

filename=md5sString.substring(8,24)+"."+ext;

file=new File(root+dirs+filename);

form.write(file);

// File file = new File(request.getServletContext().getRealPath("/") + "2.png");

}

}

}

 

for( 变量类型 变量 :变量集合 ){

}

form.getFieldName()//获取普通表单里的name值

form.getName() //获取文件名

 

List list = upload.parseRequest(request);
for(FileItem item : list){
if(item.isFormField()){
。。。。//判断该表单项是否是普通类型
}else{
。。。。 //否则该表单项是file 类型的
}

判断一个参数域是普通的表单输入域,还是文件上传域,如果该方法返回真的话,则是前者,如果为假,则是后者。是后者的情况下,就要对相应的域做相应的文件上传处理。

 

String allowext="jpg|png|mp3";//存放允许的后缀名

String filename=form.getName();//获取文件名

String ext=filename.substring(filename.lastIndexOf(".")+1);//截取点以后的后缀

if (allowext.indexOf(ext)==-1) {

throw new Exception("格式扩展名不符合");

}

 

 //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:  c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
                             //
处理获取到的上传文件的文件名的路径部分,只保留文件名部分
                             filename = filename.substring(filename.lastIndexOf("\\")+1);

其他参考:http://bbs.csdn.net/topics/391032153

posted @ 2017-06-19 21:14  bonly-ge  阅读(211)  评论(0编辑  收藏  举报