在项目开发中,上传功能特别常见,那么今天我们就一起讨论制作一个简单的带有进度条的简单案例。
1.首先我们配置web.xml中servlet配置。
t
1.编写jsp页面
2.写我们的servlet
public class UploadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
String status = (String)session.getAttribute("progress");
out.println(status);
session.removeAttribute("progress");
}
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
String status = (String)session.getAttribute("progress");
out.println(status);
session.removeAttribute("progress");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setProgressListener(new MyProgressListener(request));
try{
List<FileItem> items = upload.parseRequest(request);
for(FileItem item:items){
if(!item.isFormField()){
String fileName = getFileName(item);
String storePath = getServletContext().getRealPath("/files");
item.write(new File(storePath,fileName));
}
}
out.println("<script type='text/javascript'>alert('上传成功!');history.back();</script>");
}catch(Exception e){
throw new RuntimeException(e);
}
}
//获取上传文件的文件名
public String getFileName(FileItem item){
String fileName = item.getName();
System.out.println("上传的文件名是:"+fileName);
int lastIndex = fileName.lastIndexOf("\\");
fileName = fileName.substring(lastIndex+1);
System.out.println("截取的文件名是:"+fileName);
return fileName;
}
}
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setProgressListener(new MyProgressListener(request));
try{
List<FileItem> items = upload.parseRequest(request);
for(FileItem item:items){
if(!item.isFormField()){
String fileName = getFileName(item);
String storePath = getServletContext().getRealPath("/files");
item.write(new File(storePath,fileName));
}
}
out.println("<script type='text/javascript'>alert('上传成功!');history.back();</script>");
}catch(Exception e){
throw new RuntimeException(e);
}
}
//获取上传文件的文件名
public String getFileName(FileItem item){
String fileName = item.getName();
System.out.println("上传的文件名是:"+fileName);
int lastIndex = fileName.lastIndexOf("\\");
fileName = fileName.substring(lastIndex+1);
System.out.println("截取的文件名是:"+fileName);
return fileName;
}
}
3.编写监听器
public class MyProgressListener implements ProgressListener {
private double megaBytes = -1;//兆字节
private HttpSession session;
public MyProgressListener(HttpServletRequest request){
session = request.getSession();
}
public void update(long pBytesRead, long pContentLength, int pItems) {
double mBytes = pBytesRead/1000000;//已读取的字节数转换为M字节
double total = pContentLength/1000000;//上传文件的大小转化为M字节
if(megaBytes == mBytes)
return;
System.out.println("total===>"+total);
System.out.println("mBytes===>"+mBytes);
megaBytes = mBytes;
System.out.println("megaBytes===>"+megaBytes);
double read = (mBytes/total);
NumberFormat nf = NumberFormat.getPercentInstance();
session.setAttribute("progress", nf.format(read));//把百分比存到session中
}
}
private double megaBytes = -1;//兆字节
private HttpSession session;
public MyProgressListener(HttpServletRequest request){
session = request.getSession();
}
public void update(long pBytesRead, long pContentLength, int pItems) {
double mBytes = pBytesRead/1000000;//已读取的字节数转换为M字节
double total = pContentLength/1000000;//上传文件的大小转化为M字节
if(megaBytes == mBytes)
return;
System.out.println("total===>"+total);
System.out.println("mBytes===>"+mBytes);
megaBytes = mBytes;
System.out.println("megaBytes===>"+megaBytes);
double read = (mBytes/total);
NumberFormat nf = NumberFormat.getPercentInstance();
session.setAttribute("progress", nf.format(read));//把百分比存到session中
}
}
}