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 javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Iterator;
import java.util.List;
public class Upload extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//创建FileItem工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置缓冲区大小为1M
factory.setSizeThreshold(1024*1024);
//创建文件上传对象,配置factory
ServletFileUpload upload = new ServletFileUpload(factory);
List items = null;
try {
//解析上传请求
items = upload.parseRequest(req);
} catch (FileUploadException e) {
e.printStackTrace();
}
//创建filename变量
String filename = null;
//获取迭代器
Iterator iterator = items.iterator();
while(iterator.hasNext()){
FileItem item = (FileItem) iterator.next();
//判断是否为普通表单类型
//不是普通表单类型时
if(!item.isFormField()){
//根据系统时间戳命名
filename = System.currentTimeMillis() + ".jpg";
//通过getRealPath()获取上传文件夹目录
String photoFolder = req.getServletContext().getRealPath("upload");
//创建文件,路径为获取到的上传文件的目录,名字为根据系统时间命名的字符串
File file = new File(photoFolder, filename);
//获取父目录并创建文件夹
file.getParentFile().mkdirs();
//获取浏览器输入流
InputStream is = item.getInputStream();
//复制文件
//创建文件输出流
FileOutputStream fos = new FileOutputStream(file);
byte[] b = new byte[1024*1024];
int length = 0;
while(-1 != (length = is.read(b))){
fos.write(b,0,length);
}
fos.close();
}else {
//普通表单类型
//System.out.println(item.getFieldName());
// getString()方法将FileItem对象中保存的数据流内容以一个字符串返回
String value = item.getString();
// tomcat默认全部都是用ISO-8859-1编码
// 所以需要先将得到"字符"(不管是什么)都先用字节数组表示,且使用ISO-8859-1进行翻译,得到一个在ISO-8859-1编码环境下的字节数组.然后再用UTF-8编码这个数组,并翻译成一个字符串.
value = new String(value.getBytes("ISO-8859-1"), "UTF-8");
System.out.println(value);
}
String html = "<img src='uploaded/%s'/>";
// 返回中文响应
resp.setContentType("text/html");
// 将数据刷新到response的缓冲区
PrintWriter pw = resp.getWriter();
// 输出html语句,语句为上传图片的<img>标签
pw.format(html, filename);
}
}
Servlet上传图片(how2j
最新推荐文章于 2021-04-12 16:18:59 发布