java多文件传输enctype,commons-fileupload实现文件上传,可以选择多文件 | 学步园

文件上传下载:

package cn.zc.servlet;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Iterator;

import java.util.List;

import java.util.UUID;

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.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadServlet extends HttpServlet {

/**

* Constructor of the object.

*/

public UploadServlet() {

super();

}

/**

* Destruction of the servlet.

*/

public void destroy() {

super.destroy(); // Just puts "destroy" string in log

// Put your code here

}

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doPost(request,response);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

System.out.println("UploadServlet1");

//判断表格的提交方式是否是multipart/form-data类型

if(!ServletFileUpload.isMultipartContent(request)){

//如果不是该类型,采用普通方式处理。

//response.setContentType("text/html;charset=utf-8");

//PrintWriter out = response.getWriter();

//request.getParameter("user");//此时便可以使用request.getParameter方法

//为了方便在此直接退出

System.out.println("不是文件上传处理");

return ;

}

System.out.println("UploadServlet21");

//创建一个解析工厂

DiskFileItemFactory factory=new DiskFileItemFactory();

//设置阀值,大于此值时创建临时文件

factory.setSizeThreshold(1024*1024*10);

System.out.println("UploadServlet22");

//设置临时缓存文件的保存目录

factory.setRepository(new File(this.getServletContext().getRealPath("/temp")));

System.out.println("UploadServlet23");

//得到解析器对象

ServletFileUpload upload=new ServletFileUpload(factory);

//设置文件上传的大小10M

upload.setFileSizeMax(1024*1024*100);

System.out.println("UploadServlet24");

//设置保存文件的编码方式,

upload.setHeaderEncoding("UTF-8");

try{

//定义规定上传文件的类型

String[]arr={".jpg",".zip",".txt",".ppt",".pptx",".doc",".docx",".xls",".gif"};

//将类型放到List中

List fileStandType=Arrays.asList(arr);

System.out.println("UploadServlet25");

List items = new ArrayList();

items = upload.parseRequest(request);

//对请求进行解析,有几个输入项就会有几个FileItem对象

System.out.println("UploadServlet3");

Iterator it = items.iterator();

while(it.hasNext()){

FileItem item = (FileItem)it.next();

System.out.println("UploadServlet4");

//判断输入元素的类型,

if(item.isFormField()){//是普通项

System.out.println("UploadServlet5");

//得到name属性

String inputName=item.getFieldName();

//得到相对应的值

String inputValue=item.getString("UTF-8");//可指定字符编码,以防乱码

System.out.println("inputName: "+inputName+" : "+"inutValue: "+inputValue);

}else{//是上传文件输入项

//获取上传文件名称

System.out.println("UploadServlet6");

String fileName=item.getName();

//判断fileName是否为空即是否真的选择了上传文件,不为空继续

if(!fileName.trim().equals("")){

System.out.println("UploadServlet7");

//对文件名进行处理得到文件名

fileName=fileName.substring(fileName.lastIndexOf("\\")+1);

System.out.println("fileName: "+ fileName);

//得到文件后缀判断文件类型

String fileType=fileName.substring(fileName.lastIndexOf("."));

System.out.println("fileType: "+fileType);

//判断是否是制定的文件类型,暂时未用到

if(!fileStandType.contains(fileType)){

//如果不是制定类型的文件跳转页面,

System.out.println("文件类型不匹配");

request.setAttribute("fileTypeError","只能上传指定类型的文件,jpg/zip/txt/ppt/pptx/docx/doc/xls/gif");

request.getRequestDispatcher("/handler.jsp").forward(request, response);

return ;

}

//文件已选择,得到输入流

InputStream in=item.getInputStream();

//将上传的文件保存在服务器受保护的WEB-INF的目录下,

String savePath=this.getServletContext().getRealPath("WEB-INF/upload");

savePath=getFilePath(savePath,fileName);

//同名文件覆盖问题对fileName进行进一步处理,工具类UUID

fileName=UUID.randomUUID().toString()+"_"+fileName;

//构建输出流

FileOutputStream fos=new FileOutputStream(savePath+"\\"+fileName);

byte[] buffer=new byte[1024];

//int len=0;

while(in.read(buffer)>0){

fos.write(buffer);

fos.flush();

}

in.close();

fos.close();

request.setAttribute("finish","上传成功!");

item.delete();//在关闭流之后,删除临时缓存文件

}

}

}

}catch(Exception e){

request.setAttribute("finish","上传失败!");

}

request.getRequestDispatcher("/handler.jsp").forward(request, response);

}

//方法对文件保存目录进行处理,

public String getFilePath(String path,String fileName){

//产生目录结构的

String path = request.getContextPath();

String basePath = request.getScheme() + "://"

+ request.getServerName() + ":" + request.getServerPort()

+ path + "/";

%>

文件上传

function addElement() {

//得到隐藏input里面的value值

var index = document.getElementById("hidden").getAttribute("value");

if(index>4){

alert("最大同时上传4个文件");

return false;

}

//创建一个input类型的节点

var inputElement = document.createElement("input");

//设置新创建的节点的属性,类型为file,name值递增

inputElement.setAttribute("type", "file");

inputElement.setAttribute("name", "file" + index);

//创建文本节点

var fontElement = document.createTextNode("选择文件:");

//将创建的文本节点添加到div中

document.getElementById("upload_div").appendChild(fontElement);

//将创建的input类型的节点添加到div中

document.getElementById("upload_div").appendChild(inputElement);

//创建一个换行

var brElement = document.createElement("br");

//添加到div中

document.getElementById("upload_div").appendChild(brElement);

//将隐藏input里面的value值加1

document.getElementById("hidden").setAttribute("value",parseInt(index) + 1);

}

function deleteElement() {

//因为add方法添加了3个节点循环三次

for ( var i = 0; i < 3; i++) {

//删除最后一个节点

document.getElementById("upload_div").removeChild(document.getElementById("upload_div").lastChild);

}

//将隐藏input里面的value值设为1

document.getElementById("hidden").setAttribute("value",1);

}

action="${pageContext.request.contextPath}/servlet/UploadServlet"

method="post" enctype="multipart/form-data">

用户:

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

My JSP 'handler.jsp' starting page

1、这里要注意设定上传文件的大小,设置太小了文件上传下面的方法转化的request的值为空。

ServletFileUpload.parseRequest(request);

2、注意上传页面的form表单属性enctype="multipart/form-data"

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值