1. package com.zhanghaobo.fileupload;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.util.List;
  6.  
  7. import javax.servlet.ServletException;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11.  
  12. import org.apache.commons.fileupload.FileItem;
  13. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  14. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  15.  
  16. public class UploadServlet extends HttpServlet {
  17. @Override
  18. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
  19. throws ServletException, IOException {
  20. DiskFileItemFactory factory=new DiskFileItemFactory();
  21.  
  22. String realPath=req.getRealPath("/upload");
  23.  
  24. //物理缓存存放地
  25. factory.setRepository(new File(realPath));
  26.  
  27. //设置内存存放大小
  28. factory.setSizeThreshold(1024*1024);
  29.  
  30. ServletFileUpload upload=new ServletFileUpload(factory);
  31. //FileItem 可以表示文件(file)也可以表示文本域(form item) 有一个isFormField方法判断是否是表单
  32. try{
  33. List<FileItem> list=(List<FileItem>)upload.parseRequest(req);
  34. for(FileItem item:list){
  35. String name=item.getFieldName();
  36. if(item.isFormField()){
  37. String value=item.getString();
  38. req.setAttribute(name, value);
  39. }else{
  40. String value=item.getName();
  41. int start=value.lastIndexOf("\\");
  42. String fileName=value.substring(start+1);
  43. req.setAttribute(name, fileName);
  44. //上传文件存放地
  45. item.write(new File(realPath,fileName));
  46. }
  47. }
  48. }catch(Exception e){
  49. e.printStackTrace();
  50. }
  51.  
  52. req.getRequestDispatcher("showResult.jsp").forward(req, resp);
  53. }
  54. }
  1. public class UploadServlet extends HttpServlet {
  2. @Override
  3. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
  4. throws ServletException, IOException {
  5. DiskFileItemFactory factory=new DiskFileItemFactory();
  6.  
  7. String realPath=req.getRealPath("/upload");
  8.  
  9. //物理缓存存放地
  10. factory.setRepository(new File(realPath));
  11.  
  12. //设置内存存放大小
  13. factory.setSizeThreshold(1024*1024);
  14.  
  15. ServletFileUpload upload=new ServletFileUpload(factory);
  16. //FileItem 可以表示文件(file)也可以表示文本域(form item) 有一个isFormField方法判断是否是表单
  17. try{
  18. List<FileItem> list=(List<FileItem>)upload.parseRequest(req);
  19. for(FileItem item:list){
  20. String name=item.getFieldName();
  21. if(item.isFormField()){
  22. String value=item.getString();
  23. req.setAttribute(name, value);
  24. }else{
  25. String value=item.getName();
  26. int start=value.lastIndexOf("\\");
  27. String fileName=value.substring(start+1);
  28. req.setAttribute(name, fileName);
  29.  
  30. //上传文件存放地
  31. // item.write(new File(realPath,fileName));
  32.  
  33. InputStream is=item.getInputStream();
  34.  
  35. long all=item.getSize();
  36.  
  37. OutputStream os=new FileOutputStream(new File(realPath,fileName));
  38.  
  39. byte[] buffer=new byte[400];
  40.  
  41. int length=0;
  42. int l=0;
  43. DecimalFormat df=new DecimalFormat("#.00");
  44. while(-1!=(length=is.read(buffer))){
  45. os.write(buffer,0,length);
  46. l+=length;
  47. System.out.println("总大小"+all+""+"进度:"+(df.format((double)l/all*100))+"%"+"已经读取的大小"+l);
  48. }
  49.  
  50. is.close();
  51. os.close();
  52.  
  53. }
  54. }
  55. }catch(Exception e){
  56. e.printStackTrace();
  57. }
  58.  
  59. req.getRequestDispatcher("showResult.jsp").forward(req, resp);
  60. }
  61. }

使用servlet实现文件上传的更多相关文章

  1. Servlet实现文件上传

    一.Servlet实现文件上传,需要添加第三方提供的jar包 下载地址: 1) commons-fileupload-1.2.2-bin.zip      :   点击打开链接 2) commons- ...

  2. Servlet实现文件上传,可多文件上传

    一.Servlet实现文件上传,需要添加第三方提供的jar包 接着把这两个jar包放到 lib文件夹下: 二: 文件上传的表单提交方式必须是POST方式, 编码类型:enctype="mul ...

  3. 配置servlet支持文件上传

    Servlet3.0为Servlet添加了multipart配置选项,并为HttpServletRequest添加了getPart和getParts方法获取上传文件.为了使Servlet支付文件上传需 ...

  4. jsp+servlet实现文件上传下载

    相关素材下载 01.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  5. java commons-fileupload servlet 多文件上传

    commons-fileupload servlet 多文件上传 需要引入的 jar 包. commons-fileupload-1.3.2.jar commons-io-2.2.jar 工程路劲:查 ...

  6. servlet web文件上传

    web文件上传也是一种POST方式,特别之处在于,需设置FORM的enctype属性为multipart/form-data. 并且需要使用文件域. servlet的代码比较关键是这几句: // 使用 ...

  7. 通过JSP+servlet实现文件上传功能

    在TCP/IP中,最早出现的文件上传机制是FTP.它将文件由客户端到服务器的标准机制. 但是在JSP中不能使用FTP来上传文件,这是有JSP的运行机制所决定的. 通过为表单元素设置Method=&qu ...

  8. Servlet之文件上传

    上传表单中的注意事项: 表单 method 属性应该设置为 POST 方法,不能使用 GET 方法 表单 enctype 属性应该设置为multipart/form-data 下面的实例是借助于com ...

  9. 使用FileUpload实现Servlet的文件上传

    简介 FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下的文件上传功能. FileUpload链接 FileUpload 是基于Apache的Commons ...

  10. Servlet中文件上传下载

    1.文件下载: package FileUploadAndDown; import java.io.FileInputStream; import java.io.IOException; impor ...

随机推荐

  1. impersonate a user

    // This sample demonstrates the use of the WindowsIdentity class to impersonate a user. // IMPORTANT ...

  2. hibernate封装查询,筛选条件然后查询

    // 封装查询条件 @Test public void transmitParameter() { Map map = new HashMap<String, String>(); // ...

  3. KVM虚拟化技术简介

    kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中.它使用Linux自身的调度器进行管理,所 ...

  4. centos6 下安装xfce+vnc

    CentOS 安装图形界面的过程,简单记录一下.这里提供了两种图形界面的安装,分别是CentOS自带的gnome桌面及轻巧的xfce.据测试,我的精简版CentOS 6 64位系统安装gnome需要下 ...

  5. Android 网络流量监听开源项目-ConnectionClass源码分析

    很多App要做到极致的话,对网络状态的监听是很有必要的,比如在网络差的时候加载质量一般的小图,缩略图,在网络好的时候,加载高清大图,脸书的android 客户端就是这么做的, 当然伟大的脸书也把这部分 ...

  6. IOS 单例 创建方式

    @implementation Me static Car *sharedInstance= nil;//声明一个静态对象引用并赋为nil +(Me *) sharedInstance//声明类方法( ...

  7. 可以用google了

    半年都上不了google,现在可以了, 哈哈,支持自动更新, 有时候用google还是很不错的,尤其是英文搜索.

  8. web开发中禁止因为网速慢导致重复提交数据

    var checkSubmitFlg = false;  function check() {                if (!checkSubmitFlg) {                ...

  9. 1005acm罚时

    ACM国际大学生程序设计竞赛是由国际计算机学会主办的,一项旨在展示大学生创新能力.团队精神和在压力下编写程序.分析和解决问题能力的年度竞赛.参赛队伍最多由三名参赛队员组成,竞赛中一般命题10-13题, ...

  10. 求职基础复习之冒泡排序c++版

    代码中在第一层循环中增加一个bool值,是为了防止在排序完成后还继续无谓的比较,最多会有(n-1)*(n-2)/2次循环. #include<iostream> using namespa ...