使用jsp处理文件的上传时,会使用form表单进行数据(文本和文件)的提交<form action="" enctype="multipart/form-data" method="post"> action就是这个form中的数据提交的目标位置,enctype设置规定在发送到服务器之前如何对数据进行编码(application/x-www-form-urlencoded默认的编码,不可以上传文件,multipart/form-data用于上传文件时使用,text/plain为规范的编码,不推荐使用)method须设置为post。
<form action="/DoAddProject" enctype="multipart/form-data" method="post">
<input type="file" name="projectImg"/>
<input type="text" name="choose" />
<input type="submit" value="提交" />
前端的页面设置好之后,在servlet中进行数据的接收和存储需要使用upload这个插件。upload插件下载
放在项目的web-content下的web-inf下的lib目录下,接下来刷新项目。
创建一个servlet进行数据的接收。要在servlet上加@WebServlet("对应form表格中action的uri")
doPost的方法如下:
//set request and response encoding
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//new FileItemFactory instance and ServletFileUpload instance
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//parse request
List<FileItem> items = upload.parseRequest(request);
while(items.hasNext()){
FileItem item = (FileItem) itr.next();
// isFormField() true : item is text field, false is file field
if (item.isFormField()){
//get input name
String fName = item.getFieldName();
//get input value
String fValue = item.getString();
}else{
String fileName = new File(item.getName()).getName();
File storeFile = new File(fileName);
if(storeFile.exists()){
storeFile.delete();
}
// save to disk
item.write(storeFile);
//item.get() method, return the file content as byte array
}
}