您的位置:首页 > 其它

Servlet实现文件上传

2016-01-21 23:34 281 查看
需要commons-fileupload    commons-io-1.4两个jar包

1 upload.jsp 上传表单设置  注意三个方面  1.enctype="multipart/form-data"     2.method="post"  3<input type="file" name="file"/>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>文件上传</title>

    <script type="text/javascript">

    function addOne(){

    document.getElementById("add").innerHTML+='文件上传项:<input type="file" name="file"/><input type="button" value="加一个" onClick="addOne()"/><input type="button" value="减一个" onClick="delOne(this)"/><br/>';

   

    }

    function delOne(obj){

    obj.parentNode.parentNode.removeChild(obj.parentNode);

    }

    </script>

  </head>

  <body>

  <form action="${pageContext.request.contextPath }/servlet/UploadServlet" method="post" enctype=multipart/form-data>

  文件描述信息:<input type="text" name="description"/><br/>

  文件上传项:<input type="file" name="file"/><input type="button" value="加一个" onClick="addOne()"/><input type="button" value="减一个" onClick="delOne(this)"/><br/>

  <div id="add"></div>

  <input type="submit" value="上传"/>

  </form>

  </body>

</html>

2 UploadServlet.java

package com.yilong.upload;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.PrintWriter;

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.FileUploadBase.FileSizeLimitExceededException;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

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

import com.yilong.util.IOUtil;

public class UploadServlet extends HttpServlet {

@SuppressWarnings( "unchecked")
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");//解决请求乱码只对post请求有效
response.setCharacterEncoding("utf-8");//解决响应乱码
try{
DiskFileItemFactory factory=new DiskFileItemFactory();
factory.setRepository(new File(getServletContext().getRealPath("/WEB-INF/temp")));//设置临时目录
factory.setSizeThreshold(1024*10);//设置缓冲区的大小
ServletFileUpload uploadFile=new ServletFileUpload(factory);
if(!uploadFile.isMultipartContent(request)){
throw new RuntimeException("上传表达不正确");
}

List<FileItem> lists=uploadFile.parseRequest(request);
for(FileItem fileItem:lists){
if(fileItem.isFormField()){//普通表单项
String name=fileItem.getFieldName();
String value=fileItem.getString("utf-8");
System.out.println(name+":"+value);
}else{
String fileName=fileItem.getName();
String uuidName=UUID.randomUUID().toString();
String finalName=uuidName+"_"+fileName;
String hashStr=Integer.toHexString(finalName.hashCode());
String path=getServletContext().getRealPath("WEB-INF/upload");
char[]hashCha=hashStr.toCharArray();
for(char c:hashCha){
path=path+File.separator+c;
}
if(!new File(path).exists()){
new File(path).mkdirs();
}
InputStream in=fileItem.getInputStream();
OutputStream out=new FileOutputStream(new File(path,uuidName));
IOUtil.In2Out(in, out);
IOUtil.close(in, out);
fileItem.delete();

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

}
}catch(FileSizeLimitExceededException e){
response.getWriter().write("上传文件过大");
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);//捕获运行异常进行处理
}
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

doGet(request,response);
}

}

IOUtil.java

package com.yilong.util;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

public class IOUtil {
private IOUtil(){}
public static void In2Out(InputStream in,OutputStream out) throws IOException{
byte[] bs=new byte[1024];
int i=0;
while((i=in.read(bs))!=-1){
out.write(bs, 0, i);
}
}
public static void close(InputStream in,OutputStream out){
try {
if(in!=null){
in.close();
}if(out!=null){
out.close();
}

} catch (IOException e) {
e.pri
4000
ntStackTrace();
}finally{
in=null;
out=null;
}

}

}

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>

  <servlet>

    <servlet-name>UploadServlet</servlet-name>

    <servlet-class>com.yilong.upload.UploadServlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>UploadServlet</servlet-name>

    <url-pattern>/servlet/UploadServlet</url-pattern>

  </servlet-mapping>

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

</web-app>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: