1 概念
文件上传:把客户端的文件 上传到服务器端::
2 对jsp要求
1:请求方式必须是post:
2:表单必须加属性:enctype=multipart/form-data
3:表单必须有文件域:input type=file
<form action="<c:url value='/day07/upload01.do'/>" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="uname" value="韩梅梅"/><br/>
密码:<input type="text" name="upwd" value="123"/><br/>
年龄:<input type="text" name="uage" value="19"/><br/>
头像:<input type="file" name="uphoto"/><br/>
<input type="submit" value="注册"/><br/>
</form>
3 对servlet分析
package com.zhiyou100_07.upload;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Demo01Upload extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
InputStream in=req.getInputStream();
byte[] arr=new byte[1024];
int n;
while((n=in.read(arr))!=-1){
System.out.print(new String(arr, 0, n));
}
}
...
}
4 servlet的正确写法
package com.zhiyou100_07.upload;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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;
import org.apache.commons.io.IOUtils;
public class Demo02Upload extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
User user=new User();
DiskFileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload upload=new ServletFileUpload(factory);
Map<String, String> map=new HashMap<String,String>();
File fileImgs=new File(req.getServletContext().getRealPath("/imgs"));
try {
List<FileItem> list=upload.parseRequest(req);
for (FileItem fileItem : list) {
String name=fileItem.getFieldName();
if(fileItem.isFormField()){
String value=fileItem.getString("utf-8");
map.put(name, value);
}else{
String newFileName=System.currentTimeMillis()+"_"+fileItem.getName();
File muDi=new File(fileImgs,newFileName);
System.out.println(muDi.getAbsolutePath());
InputStream in=fileItem.getInputStream();
FileOutputStream out=new FileOutputStream(muDi);
IOUtils.copy(in, out);
out.close();
map.put(name, newFileName);
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
user.setUage(Integer.parseInt(map.get("uage")));
user.setUname(map.get("uname"));
user.setUpwd(map.get("upwd"));
user.setUphotoPath(map.get("uphoto"));
System.out.println(user);
}
...
}