问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java怎么用commons-fileupload实现上传文件

发布网友 发布时间:2022-04-21 21:02

我来回答

2个回答

懂视网 时间:2022-04-23 09:04

这次给大家带来FileUpload实现单个文件的上传,FileUpload实现单个文件上传的注意事项有哪些,下面就是实战案例,一起来看一下。

jQuery.AjaxFileUpload.js是一款jQuery插件,用于通过ajax上传文件。

语法:

$.ajaxFileUpload([options])

options参数说明:

1、url           上传处理程序地址。  

2,fileElementId      需要上传的文件域的ID,即<input type="file">的ID。

3,secureuri        是否启用安全提交,默认为false。

4,dataType        服务器返回的数据类型。可以为xml,script,json,html。如果不填写,jQuery会自动判断。

5,success        提交成功后自动执行的处理函数,参数data就是服务器返回的数据。

6,error          提交失败自动执行的处理函数。

7,data           自定义参数。这个东西比较有用,当有数据是与上传的图片相关的时候,这个东西就要用到了。

8, type           当要提交自定义参数时,这个参数要设置成post

功能特点:

它 不依赖于 特定的HTML , 只要给 它 一个 “ < INPUTTYPE= "file" >

它不需要 你的 服务器 响应 时指定 任何 特定 方式

可以对大批量文件进行操作

示例代码:

-- Use as little as --
$('#one-specific-file').ajaxfileupload({
'action': '/upload.php'
});
-- or as much as --
$('input[type="file"]').ajaxfileupload({
'action': '/upload.php',
'params': {
'extra': 'info'
},
'onComplete': function(response) {
console.log('custom handler for file:');
alert(JSON.stringify(response));
},
'onStart': function() {
if(weWantedTo) return false; // cancels upload
},
'onCancel': function() {
console.log('no file selected');
}
});

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

HTML5+Ajax文件上传进度条显示(图文详解)

js实现ajax分页(图文详解)

AJAX实现无刷新数据分页

热心网友 时间:2022-04-23 06:12

文件上传步骤:
     1. 导入jar包
          common-fileupload.jar
          common-io.jar      
     2. 上传jsp页面编辑
         <body>
            <form action="${pageContext.request.contextPath}/servlet/UploadHandleServlet" enctype="multipart/form-data" method="post">
                上传用户:<input type="text" name="username"><br/>
                上传文件1:<input type="file" name="file1"><br/>
                上传文件2:<input type="file" name="file2"><br/>
                            <input type="submit" value="提交">
            </form>
        </body>    
     3. 消息提示页面(成功or失败)     
            <body>
                ${message}
            </body>    
     4. 处理文件上传的servlet编写   
         import java.io.File;
         import java.io.FileOutputStream;
         import java.io.IOException;
         import java.io.InputStream;
         import java.util.List;
         import java.util.UUID;
             
             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.FileUploadBase;
             import org.apache.commons.fileupload.ProgressListener;
             import org.apache.commons.fileupload.disk.DiskFileItemFactory;
             import org.apache.commons.fileupload.servlet.ServletFileUpload;
              
             public class UploadHandleServlet extends HttpServlet {
              
              public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
                 //得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全
                 String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");
                 //上传时生成的临时文件保存目录
                 String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp");
                 File tmpFile = new File(tempPath);
                 if (!tmpFile.exists()) {
                  //创建临时目录
                  tmpFile.mkdir();
                 }
                  
                 //消息提示
                 String message = "";
                 try{
                  //使用Apache文件上传组件处理文件上传步骤:
                  //1、创建一个DiskFileItemFactory工厂
                  DiskFileItemFactory factory = new DiskFileItemFactory();
                  //设置工厂的缓冲区的大小,当上传的文件大小超过缓冲区的大小时,就会生成一个临时文件存放到指定的临时目录当中。
                  factory.setSizeThreshold(1024*100);//设置缓冲区的大小为100KB,如果不指定,那么缓冲区的大小默认是10KB
                  //设置上传时生成的临时文件的保存目录
                  factory.setRepository(tmpFile);
                  //2、创建一个文件上传解析器
                  ServletFileUpload upload = new ServletFileUpload(factory);
                  //监听文件上传进度
                  upload.setProgressListener(new ProgressListener(){
                   public void update(long pBytesRead, long pContentLength, int arg2) {
                    System.out.println("文件大小为:" + pContentLength + ",当前已处理:" + pBytesRead);
                    /**
                    * 文件大小为:14608,当前已处理:4096
                     文件大小为:14608,当前已处理:7367
                     文件大小为:14608,当前已处理:11419
                     文件大小为:14608,当前已处理:14608
                    */
                   }
                  });
                  //解决上传文件名的中文乱码
                  upload.setHeaderEncoding("UTF-8"); 
                  //3、判断提交上来的数据是否是上传表单的数据
                  if(!ServletFileUpload.isMultipartContent(request)){
                   //按照传统方式获取数据
                   return;
                  }
                   
                  //设置上传单个文件的大小的最大值,目前是设置为1024*1024字节,也就是1MB
                  upload.setFileSizeMax(1024*1024);
                  //设置上传文件总量的最大值,最大值=同时上传的多个文件的大小的最大值的和,目前设置为10MB
                  upload.setSizeMax(1024*1024*10);
                  //4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
                  List<FileItem> list = upload.parseRequest(request);
                  for(FileItem item : list){
                   //如果fileitem中封装的是普通输入项的数据
                   if(item.isFormField()){
                    String name = item.getFieldName();
                    //解决普通输入项的数据的中文乱码问题
                    String value = item.getString("UTF-8");
                    //value = new String(value.getBytes("iso8859-1"),"UTF-8");
                    System.out.println(name + "=" + value);
                   }else{//如果fileitem中封装的是上传文件
                    //得到上传的文件名称,
                    String filename = item.getName();
                    System.out.println(filename);
                    if(filename==null || filename.trim().equals("")){
                     continue;
                    }
                    //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
                    //处理获取到的上传文件的文件名的路径部分,只保留文件名部分
                    filename = filename.substring(filename.lastIndexOf("\\")+1);
                    //得到上传文件的扩展名
                    String fileExtName = filename.substring(filename.lastIndexOf(".")+1);
                    //如果需要*上传的文件类型,那么可以通过文件的扩展名来判断上传的文件类型是否合法
                    System.out.println("上传的文件的扩展名是:"+fileExtName);
                    //获取item中的上传文件的输入流
                    InputStream in = item.getInputStream();
                    //得到文件保存的名称
                    String saveFilename = makeFileName(filename);
                    //得到文件的保存目录
                    String realSavePath = makePath(saveFilename, savePath);
                    //创建一个文件输出流
                    FileOutputStream out = new FileOutputStream(realSavePath + "\\" + saveFilename);
                   //创建一个缓冲区
                    byte buffer[] = new byte[1024];
                    //判断输入流中的数据是否已经读完的标识        int len = 0;
                    //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
                    while((len=in.read(buffer))>0){
                     //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
                     out.write(buffer, 0, len);
                    }
                    //关闭输入流
                    in.close();
                    //关闭输出流
                    out.close();        //删除处理文件上传时生成的临时文件        //item.delete();        message = "文件上传成功!";
                   }
                  }
                 }catch (FileUploadBase.FileSizeLimitExceededException e) {
                  e.printStackTrace();
                  request.setAttribute("message", "单个文件超出最大值!!!");
                  request.getRequestDispatcher("/message.jsp").forward(request, response);
                  return;
                 }catch (FileUploadBase.SizeLimitExceededException e) {
                  e.printStackTrace();
                  request.setAttribute("message", "上传文件的总的大小超出*的最大值!!!");
                  request.getRequestDispatcher("/message.jsp").forward(request, response);
                  return;
                 }catch (Exception e) {
                  message= "文件上传失败!";
                  e.printStackTrace();
                 }
                 request.setAttribute("message",message);
                 request.getRequestDispatcher("/message.jsp").forward(request, response);
              }
              private String makeFileName(String filename){ //2.jpg
               //为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名
               return UUID.randomUUID().toString() + "_" + filename;
              }  
             private String makePath(String filename,String savePath){
               //得到文件名的hashCode的值,得到的就是filename这个字符串对象在内存中的地址
               int hashcode = filename.hashCode();
               int dir1 = hashcode&0xf; //0--15
               int dir2 = (hashcode&0xf0)>>4; //0-15
               //构造新的保存目录
               String dir = savePath + "\\" + dir1 + "\\" + dir2; //upload\2\3 upload\3\5
               if(!file.exists()){
                file.mkdirs();
              }
               return dir;
              }
              
              public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
               doGet(request, response);
              }
             }
     5.编写web.xml文件(servlet的映射配置)   
            <servlet>
                <servlet-name>UploadHandleServlet</servlet-name>
                <servlet-class>me.gacl.web.controller.UploadHandleServlet</servlet-class>
            </servlet>
             
            <servlet-mapping>
                <servlet-name>UploadHandleServlet</servlet-name>
                <url-pattern>/servlet/UploadHandleServlet</url-pattern>
            </servlet-mapping>
 
 
 注: 网上看到的,出处找不到了,望见谅!!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
右附件包块怎么治疗? 右侧附件区见混合性包块回声、大小约4 .9*4。8cm.包膜完整、内可见不... 网络学术资源网络学术资源的获取途径 请问:正式出版物一定是合法出版物吗? 正式出版发行的期刊有哪些 玉米莲藕排骨汤怎么做才好吃 电脑开机进入不了BOSS, 怎么关闭苹果手机的自动备份功能 钢结构制作与安装的阶段和要点 钢结构设计的基本概念、关键步骤和应用 Java 批量大文件上传下载如何实现? JAVA 前端大文件上传如何实现? java如何实现文件上传 手机酷狗音乐在同一步手机同时登录两个帐号应怎样操作 酷狗音乐怎么多台手机同时播放 酷狗音乐会员可以几个人用怎么用 酷狗自己入了会员怎么才可以让另一个手机也入我的... 株洲的CCNA,CCNP,MCSE在哪里学? 听说北京yeslab的老师都是wolf出来的? 系统集成总代与金牌代理的关系? 思科、华三、瑞杰... 网易企业邮箱支持outlook和foxmail吗? 具体怎么设... 如何使用foxmail 7.2客户端登陆网易企业邮箱? Foxmail如何接受网易企业邮箱的邮件? 163企业邮箱怎么和foxmail连不上 不锈钢不粘锅 炒锅好不好,优点缺点是什么 我用的是网易企业邮箱,怎么在Foxmail7.2上设置,... 304蜂窝状不粘锅好吗 163企业邮箱foxmail客户端怎么设置 304不粘锅第一次使用的正确方法 foxmail无法加载163和企业邮箱 java实现多文件上传 java中怎么把文件上传到服务器的指定路径? 怎么样用JAVA 实现文件的上传下载? java怎么实现上传附件的功能 java web前端上传文件到后台常用的几种方式 java web怎么实现文件上传到服务器 用java实现文件的上传与下载 如何实现java 流式文件上传 java中怎么把文件上传到服务器的指定路径 Java怎样实现跨服务器文件上传 java 实现文件上传到另一台服务器,该怎么解决 如何用java程序实现上传文件到指定的URL地址 java怎么把文件传输到file 如何完成打印机共享 怎么共享另一台电脑打印机 怎么共享本地打印机 家里的数台电脑如何共享打印机? 如何将本地打印机设置为网络打印机共享 本地网络怎么设置共享打印机共享 如何通过物联网实验箱实现传感器数据的采集及显示