1.JSP上传
2.DiskFileItemFactory类
3.ServletFileUpload类
4.request
5.文件的描述,上传的文件
演示代码:这里需要注意两点,不同的浏览器是不一样的,有的浏览器上传的时候是全路径,而有的浏览器上传只是一个文件的名字,所以,全路径的浏览器还要做一下字符串的处理。还有一点就是,可能程序已经好使了,但是在eclipse中仍然看不到文件,这是正常的,需要在我的电脑中进行查找。
JSP页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/DemoTest/Upload" enctype="multipart/form-data" method="post">
文件描述:<input type="text" name="text"><br>
上传文件:<input type="file" name="myfile"><br>
<input type="submit" value="上传">
</form>
</body>
</html>
上传时是全路径的浏览器
package mine.test;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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;
@WebServlet("/Upload")
public class Upload extends HttpServlet {
private static final long serialVersionUID = 1L;
public Upload() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//这个版本是可以处理带路径上传的拼接字符串
//创建磁盘文件工厂类
DiskFileItemFactory factory=new DiskFileItemFactory();
//创建核心的解析对象,并把factory传进去
ServletFileUpload upload=new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
try {
@SuppressWarnings("unchecked")
//解析request,获取文件列表
List<FileItem> list=upload.parseRequest(request);
//高级for进行遍历
for(FileItem fileItem:list) {
//如果为普通文本项
if(fileItem.isFormField()) {
String name=fileItem.getFieldName();
String value=fileItem.getString("UTF-8");
System.out.println(name+":"+value);
}else {
//如果为文件项
String filename=fileItem.getName();
System.out.println(filename);
int index=filename.lastIndexOf("\\");
String sfilename=filename.substring(index+1);
System.out.println(sfilename);
//获取输入流
InputStream in=fileItem.getInputStream();
//获取存储的路径
String path=getServletContext().getRealPath("/upload");
System.out.println(path);
//获取输出流并进行读写
String spath=path+"\\"+sfilename;
System.out.println(spath);
OutputStream os=new FileOutputStream(spath);
int len=0;
byte[] b=new byte[1024];
while((len=in.read(b))!=-1) {
os.write(b, 0, len);
}
in.close();
os.close();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
上传时仅仅是文件的浏览器
package mine.test;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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;
/**
* Servlet implementation class Upload1
*/
@WebServlet("/Upload1")
public class Upload1 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Upload1() {
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
response.getWriter().append("Served at: ").append(request.getContextPath());
//创建磁盘文件工厂类
DiskFileItemFactory factory=new DiskFileItemFactory();
//创建核心的解析对象,并把factory传进去
ServletFileUpload upload=new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
try {
@SuppressWarnings("unchecked")
//解析request,获取文件列表
List<FileItem> list=upload.parseRequest(request);
//高级for进行遍历
for(FileItem fileItem:list) {
//如果为普通文本项
if(fileItem.isFormField()) {
String name=fileItem.getFieldName();
String value=fileItem.getString("UTF-8");
System.out.println(name+":"+value);
}else {
//如果为文件项
String filename=fileItem.getName();
System.out.println(filename);
//获取输入流
InputStream in=fileItem.getInputStream();
//获取存储的路径
String path=getServletContext().getRealPath("/upload");
System.out.println(path);
//获取输出流并进行读写
OutputStream os=new FileOutputStream(path+"/"+filename);
int len=0;
byte[] b=new byte[1024];
while((len=in.read(b))!=-1) {
os.write(b, 0, len);
}
in.close();
os.close();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}