您的位置:首页 > Web前端 > JavaScript

JSP之文件上传

2015-11-16 15:38 585 查看

摘要:本文介绍怎么结合servlet,jsp来完成文件的上传

1,需要引入两个jar包

commons-fileupload-1.2.1.jar,commons-io-1.4.jar

2,修改web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
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_3_0.xsd"> <display-name></display-name>

<servlet>
<servlet-name>upload</servlet-name>
<servlet-class>UploadServlet</servlet-class>
<init-param>
<param-name>filePath</param-name>
<param-value>store</param-value>
</init-param>
<init-param>
<param-name>tempFilePath</param-name>
<param-value>temp</param-value>
</init-param>
</servlet>
<servlet-mapping>

<servlet-name>upload</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


3,需要一个html界面来点击上传的文件路径等

<html>
<head>
<title>Upload</title>
</head>
<body >
<form name="uploadForm" method="POST"
enctype="MULTIPART/FORM-DATA"
action="upload">
<table>
<tr>
<td><div align="right">User Name:</div></td>
<td><input type="text" name="username" size="30"/> </td>
</tr>
<tr>
<td><div align="right">Upload File1:</div></td>
<td><input type="file" name="file1" size="30"/> </td>
</tr>
<tr>
<td><div align="right">Upload File2:</div></td>
<td><input type="file" name="file2" size="30"/> </td>
</tr>
<tr>
<td><input type="submit" name="submit" value="upload"></td>
<td><input type="reset" name="reset" value="reset"></td>
</tr>
</table>
</form>
</body>
</html>


4,通过servlet来控制文件的上传

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletConfig;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadServlet extends HttpServlet{
private String filePath;//存放上传文件的目录
private String tempFilePath;//存放临时文件的目录
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/plain");
//向客户端发送响应正文
PrintWriter outNet=res.getWriter();
//创建一个基于硬盘的FileItem工厂
DiskFileItemFactory factory=new DiskFileItemFactory();
//设置向硬盘写数据时所用的缓冲区的大小,此处为4k
factory.setSizeThreshold(4*1024);
//设置临时目录
factory.setRepository(new File(tempFilePath));
//设置一个文件上传处理器
ServletFileUpload upload=new ServletFileUpload(factory);
//设置允许上传的文件的最大尺寸,此为4m
upload.setFileSizeMax(4*1024*1024);
try {
List items=upload.parseRequest(req);
Iterator ite=items.iterator();
while (ite.hasNext()) {
FileItem item=(FileItem) ite.next();
if(item.isFormField()){
processFormField(item,outNet); //处理普通的表单域

}else{
processUploadedFile(item,outNet); //处理上传文件

}
}
outNet.close();

} catch (FileUploadException e) {
throw new RuntimeException();
}
}

private void processUploadedFile(FileItem item, PrintWriter outNet) {
String filename=item.getFieldName();
int index=filename.lastIndexOf("\\");
filename=filename.substring(index+1,filename.length());
long filesize=item.getSize();

if(filename.equals("")&&filesize==0)return;

File uploadFile=new File(filePath+"/"+filename);

try {
item.write(uploadFile);
outNet.print(filename+"is saved.");
outNet.print("The size of"+filename+"is"+filesize+"\r\n");
} catch (Exception e) {
throw new RuntimeException();
}

}

private void processFormField(FileItem item, PrintWriter outNet) {
String name=item.getFieldName();
String value=item.getString();
outNet.println(name+":"+value+"\r\n");

}

@Override
public void init(ServletConfig config) throws ServletException {

super.init(config);
filePath=config.getInitParameter("filePath");
tempFilePath=config.getInitParameter("tempFilePath");
filePath=getServletContext().getRealPath("/")+"store";
tempFilePath=getServletContext().getRealPath("/")+"temp";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: