GVKun编程网logo

使用Apache Commons文件上载API在Jsp中上载多个文件(apache运行jsp)

14

本文将带您了解关于使用ApacheCommons文件上载API在Jsp中上载多个文件的新内容,同时我们还将为您解释apache运行jsp的相关知识,另外,我们还将为您提供关于Android:使用Apa

本文将带您了解关于使用Apache Commons文件上载API在Jsp中上载多个文件的新内容,同时我们还将为您解释apache运行jsp的相关知识,另外,我们还将为您提供关于Android:使用Apache Commons Compress 7zip一个文件夹、Apache Commons FileUpload实现文件上传、Apache Commons fileUpload实现文件上传之一、Apache Commons fileUpload文件上传多个示例分享的实用信息。

本文目录一览:

使用Apache Commons文件上载API在Jsp中上载多个文件(apache运行jsp)

使用Apache Commons文件上载API在Jsp中上载多个文件(apache运行jsp)

我无法上传多个文件。我正在使用此代码。这里itr.hasNext()返回false。

FileUpload.jsp

<%@ page import="java.util.*" %>   <%@ page import="java.util.Iterator" %>   <%@ page import="java.io.File" %>   <%@ page import="org.apache.commons.fileupload.servlet.*" %>   <%@ page import="org.apache.commons.fileupload.disk.*"%>   <%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>   <%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>   <%@ page import="org.apache.commons.fileupload.*"%>   <%@ page contentType="text/html;charset=UTF-8" language="java" %>   <center><table border="2">        <tr>        <td>        <h1>Your files  uploaded </h1>        </td>        </tr>   <% boolean isMultipart = ServletFileUpload.isMultipartContent(request);    System.out.println("isMultipart="+isMultipart);    System.out.println(config.getServletContext());           FileItemFactory factory = new DiskFileItemFactory();           ServletFileUpload upload = new ServletFileUpload(factory);           System.out.println(upload.parseRequest(request));               List items=null;           try {                items = upload.parseRequest(request);           } catch (FileUploadException e) {                   e.printStackTrace();           }           Iterator itr = items.iterator();           while (itr.hasNext()) {           FileItem item = (FileItem)(itr.next());           out.println("itr");           if (item.isFormField()) {                    try{                        String field=item.getFieldName();                        String value=item.getString();                        System.out.println("field="+value);                    }                    catch(Exception e){}           }            else {                   try {                       out.println("nor done");                           String itemName = item.getName();                           out.println("1done");                           File savedFile = new File("/home/saurabh/assignments/"+itemName);                           item.write(savedFile);                             out.println("done");                   } catch (Exception e) {                           e.printStackTrace();                   }           }           }   %>    </table>   </center>

html文件是:-

<html> <head><title>Upload page</title></head></p> <p><body> <form action="FileUpload.jsp" method="post" enctype="multipart/form-data" name="form1" id="form1">   <center>   <table border="2">       <tr>               <td align="center"><b>Multipale file Uploade</td>           </tr>       <tr>               <td>                       Specify file: <input name="file" type="file" id="file">                   <td>           </tr>           <tr>              <td>                     Specify file:<input name="file" type="file" id="file">                  </td>        <tr>                   <td>                      Specify file:<input name="file" type="file" id="file">                   </td>                 </tr>                 <tr>                    <td align="center">               <input type="submit" name="Submit" value="Submit files"/>                        </td>                 </tr>    </table>        <center> </form> </body> </html>

这是怎么引起的,我该如何解决?

答案1

小编典典

您正在两次解析请求。第一次打印项目,第二次真正获取要处理的项目。这行不通。它只能解析一次。

删除以下无用的行

System.out.println(upload.parseRequest(request));

如果您确实出于某种原因打算打印已解析的项目,则应该这样做

System.out.println(items);

该请求中解析了一次请求之后try


具体问题 无关 ,JSP并不是从事这项工作的最佳地点。在servlet中完成此工作,并将结果收集到放置在请求范围内的某些map /
bean中,然后将请求转发到JSP以显示结果。

Android:使用Apache Commons Compress 7zip一个文件夹

Android:使用Apache Commons Compress 7zip一个文件夹

我在我的.gradle包含了以下.gradle :

compile 'org.apache.commons:commons-compress:1.8'

我想7zip一个文件夹 。 我努力了

SevenZOutputFile sevenZOutput = new SevenZOutputFile(file); SevenZArchiveEntry entry = sevenZOutput.createArchiveEntry(filetoArchive,name); sevenZOutput.putArchiveEntry(entry); sevenZOutput.write(contentOfEntry); //this is what I don't understand!! sevenZOutput.closeArchiveEntry();

我需要一些帮助和帮助来完成上述任务。

谢谢。

使用7-Zip在同一个文件上进行压缩和删除

使用CMD在MysqL中导入压缩文件

Windows批处理脚本使用7ziprecursion提取特定文件

7zip命令行 – 创build可执行的jar文件

Windows CMD文件/文件夹压缩使用7z或替代.tar.gz

使用FOR或FORFILES批处理命令来单独存档特定文件

如何处理CRC错误,同时通过Powershell中的7zip命令提取.zip?

7z不能从putty下的shell脚本运行

指定批处理执行的zip文件

如何使用7zip直接为.7z存档文件而不提取?

sevenZOutput.write(contentOfEntry);

替换为

sevenZOutput.write(Files.toByteArray(filetoArchive));

Apache Commons FileUpload实现文件上传

Apache Commons FileUpload实现文件上传

一、Apache Commons-FileUpload简介

Apache Commons是一个专注于可重用Java组件的所有方面的 Apache 项目。
Apache Commons项目由三个部分组成:

  • Commons Proper - 可重用Java组件的存储库。
  • The Commons Sandbox - 用于Java组件开发的工作区。
  • The Commons Dormant - 当前不活动的组件存储库。

Commons-FileUpload是Commons Proper中的一个组件,该组件依赖于Commons-IO ,Commons-IO也是 Commons Proper中的一个组件。
Commons FileUpload的JAR包下载
Commons IO的JAR包下载

二.maven依赖

<!-- upload file -->
        <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

三.前端界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <% String path = request.getContextPath(); %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>upload</title>
</head>
<br>
<br>

<form action="<%=path%>/device/uploadFile" method ="post" enctype="multipart/form-data">
    <input type ="file" name ="doc1"><br><br>
    <input type ="file" name ="doc2"><br><br>
    <input type ="text" name = info><br><br>
    <input type ="password" name ="password"><br><br>
    
    <input type="submit" value="提交">
</form>

<body>

</body>
</html>

四.后台代码

@RequestMapping(value="/uploadFile")
    public String uploadFile(final HttpServletRequest request, final HttpServletResponse response){         
    
        request.setAttribute("msg", "Not first time!");        
         //创建一个“硬盘文件条目工厂”对象
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //设置阈值,设置JVM一次能够处理的文件大小(默认吞吐量是10KB)
        factory.setSizeThreshold(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD);
        //设置临时文件的存储位置(文件大小大于吞吐量的话就必须设置这个值,比如文件大小:1GB ,一次吞吐量:1MB)
         factory.setRepository(new File("d:\\test"));
        //创建核心对象
         ServletFileUpload fileUpload = new ServletFileUpload(factory);
        //设置最大可支持的文件大小(10MB)
         fileUpload.setFileSizeMax(1024*1024*10);
        //设置转换时使用的字符集
         fileUpload.setHeaderEncoding("UTF-8");
         if(ServletFileUpload.isMultipartContent(request)){
             try {
                List<FileItem> fileItems = fileUpload.parseRequest(request);
                for ( FileItem fileItem : fileItems) {
                    if(fileItem.isFormField()){//判断该FileItem为一个普通的form元素
                        //获取字段名
                        String fieldName = fileItem.getFieldName();
                        //获取字段值,并解决乱码
                        String fieldValue = fileItem.getString("UTF-8");
                        System.out.println(fieldName +" : " + fieldValue);
                        
                    }else{//判断该FileItem为一个文件
                        
                        System.out.println("Start to uplaod file!");
                        //获取文件名
                        String fileName = fileItem.getName();
                        System.out.println("fileName : " + fileName);
                        //获取文件大小
                        long fileSize = fileItem.getSize();
                        System.out.println("fileSize : " + fileSize);
                        
                        fileItem.write(new File("D://test//upload"+File.separator +fileName));
                    }
                }
            } catch (FileUploadException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
         }
        
    return "device/uploadFile";
    }

 五。异常

catch(FileUploadBase.SizeLimitExceededException ex){
                out.print("上传失败,文件太大,单个文件的最大限制是:"+upload.getSizeMax()+"bytes!");    
}

1.其中需要注意的是流的操作,和File类的操作,mkdirs()和mkdir()的区别是什么?它们都是用来创建文件夹的,区别在mkdirs能创建多级目录,而mkdir()只能创建当前的文件夹,如果发现上一层目录并还没有创建时,它也会无动于衷,什么也不干,也就不能创建当前文件夹,必须先要创建了上一级文件夹才可以。

2.上面还有很多的问题需要解决,比如上传文件名的乱码问题,比如单表内容的乱码问题,比如上传文件同名问题,如果上传的文件很大,该如何进行处理,比如,放在同一级目录下的文件过多如何处理。每次都自己手动写输出流,将内容存到指定位置,太过麻烦,等等问题,现在写一个加强版,在解决上面所有的问题。

3.上传文件名乱码问题:使用servletFileUpload.setHeaderEncoding("UTF-8");或者request.setCharacterEncoding("UTF-8")都可以

4.表单内容乱码问题:使用getString("utf-8")即可,也就是在获取内容时,就可以设置码表。

5.上传文件同名问题:使用UUID.randomUUID().toString().replace("-", "").获得一个独一无二的32位数字

6.使用FileUtils.copyInputStreamToFile(is, file);来将内容输出到指定路径文件中去,mkdirs() 自动创建目录

7.同一级目录下的文件过多问题:创建多级目录,通过文件名的hashcode的值,hashCode为int型,占4个字节,一个字节占8位,也就是占32位,将其分组,4位4位一组,就能分8组,每一次代表一层目录,也就能够分8层目录,每一层中,有可以创建16种不同的文件夹。这样算下来,就能有很多很多个文件夹了,每个文件夹下面都可以存很多文件,看我们的业务需求,来决定要创建几层目录,就从hashcode中拿几组数据出来。原理图如下

            

 生成两级目录
public class StringUtils {

    /**
     * 生成二级目录
     * @param fileName  abc.txt
     * @return  /4/5
     */
    public static String getDir(String fileName) {
        //1 hashCode值
        int hashCode = fileName.hashCode();
        System.out.println(hashCode);
        //2 第一层 0xf表示15的16进制数。
        int dir1 = hashCode & 0xf;
        //3 第二层目录
        int dir2 = hashCode >>> 4 & 0xf;
        
        //4 拼写
        return "/" + dir1 + "/" + dir2;
    }
    
    public static void main(String[] args) {
        System.out.println(getDir("abc.txt"));
    }

}

总结上传:

        其实理解了也不是很难,就是上传文件后的处理比较麻烦,各种小问题,存储过程最为麻烦。

        1、创建工厂类

        2、使用核心类,

        3、解析request请求,

        4、遍历请求体的内容,将上传内容和普通表单内容都获取出来

        5、获取到上传内容时,对其存储位置进行设置

        其中很多细节问题都在上面已经说清楚了,代码中也有很多注释。

 

Apache Commons fileUpload实现文件上传之一

Apache Commons fileUpload实现文件上传之一

这篇文章主要介绍了Apache Commons fileUpload实现文件上传之一的相关资料,需要的朋友可以参考下

废话不多说了,直奔主题了。

需要两个jar包:

commons-fileupload.jar

Commons IO的jar包(本文使用commons-io-2.4.jar)

利用Servlet来实现文件上传。

package web.servlet; import java.io.IOException; import javax.servlet.servletexception; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.util.Iterator; import java.util.List; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.diskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /** * Servlet implementation class UploadServlet */ @WebServlet("/UploadServlet") public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; private String uploadpath = "D:\temp"; // 上传文件的目录 private String tempPath = "d:\temp\buffer\"; // 临时文件目录 File tempPathFile; public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, servletexception { try { // Create a factory for disk-based file items diskFileItemFactory factory = new diskFileItemFactory(); // Set factory constraints factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb factory.setRepository(tempPathFile);// 设置缓冲区目录 // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Set overall request size constraint upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB List items = upload.parseRequest(request);// 得到所有的文件 Iterator i = items.iterator(); while (i.hasNext()) { FileItem fi = (FileItem) i.next(); String fileName = fi.getName(); if (fileName != null) { File fullFile = new File(fi.getName()); File savedFile = new File(uploadpath, fullFile.getName()); fi.write(savedFile); } } System.out.print("upload succeed"); } catch (Exception e) { // 可以跳转出错页面 e.printstacktrace(); } } public void init() throws servletexception { File uploadFile = new File(uploadpath); if (!uploadFile.exists()) { uploadFile.mkdirs(); } File tempPathFile = new File(tempPath); if (!tempPathFile.exists()) { tempPathFile.mkdirs(); } } }

jsp

File upload

File:

这样就能简单实现一个文件上传功能了,当然这是最最最基本的,继续研究中。

Apache Commons fileUpload文件上传多个示例分享

Apache Commons fileUpload文件上传多个示例分享

这篇文章主要为大家分享了Apache Commons fileUpload文件上传4个示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文通过实例来介绍如何使用commons-fileupload.jar,Apache的commons-fileupload.jar可方便的实现文件的上传功能,具体内容如下

将Apache的commons-fileupload.jar放在应用程序的WEB-INFlib下,即可使用。下面举例介绍如何使用它的文件上传功能。

所使用的fileUpload版本为1.2,环境为Eclipse3.3+MyEclipse6.0。FileUpload 是基于 Commons IO的,所以在进入项目前先确定Commons IO的jar包(本文使用commons-io-1.3.2.jar)在WEB-INFlib下。

此文作示例工程可在文章最后的附件中下载。

示例1

最简单的例子,通过ServletFileUpload静态类来解析Request,工厂类FileItemFactory会对mulipart类的表单中的所有字段进行处理,不只是file字段。getName()得到文件名,getString()得到表单数据内容,isFormField()可判断是否为普通的表单项。demo1.htmlFile upload //必须是multipart的表单数据。Your name:File:demo1.jspitems = upload.parseRequest(request); Iterator itr = items.iterator(); while (itr.hasNext()) { FileItem item = (FileItem) itr.next(); //检查当前项目是普通表单项目还是上传文件。 if (item.isFormField()) {//如果是普通表单项目,显示表单内容。 String fieldName = item.getFieldName(); if (fieldName.equals("name")) //对应demo1.html中type="text" name="name" out.print("the field name is" + item.getString());//显示表单内容。 out.print(""); } else {//如果是上传文件,显示文件名。 out.print("the upload file name is" + item.getName()); out.print(""); } } } else { out.print("the enctype must be multipart/form-data"); } %>File upload结果:the field name isjeffthe upload file name isD:C语言考试样题作业题.rar示例2

上传两个文件到指定的目录。

demo2.html

File upload

File1:

File2:

demo2.jsp

items = upload.parseRequest(request);//得到所有的文件 Iterator itr = items.iterator(); while(itr.hasNext()){//依次处理每个文件 FileItem item=(FileItem)itr.next(); String fileName=item.getName();//获得文件名,包括路径 if(fileName!=null){ File fullFile=new File(item.getName()); File savedFile=new File(uploadpath,fullFile.getName()); item.write(savedFile); } } out.print("upload succeed"); } catch(Exception e){ e.printstacktrace(); } } else{ out.println("the enctype must be multipart/form-data"); } %>

File upload

结果:

upload succeed

此时,在"D:temp"下可以看到你上传的两个文件。

示例3

上传一个文件到指定的目录,并限定文件大小。

demo3.html

File upload

File:

demo3.jsp

items = upload.parseRequest(request);//得到所有的文件 Iterator i = items.iterator(); while (i.hasNext()) { FileItem fi = (FileItem) i.next(); String fileName = fi.getName(); if (fileName != null) { File fullFile = new File(fi.getName()); File savedFile = new File(uploadpath, fullFile .getName()); fi.write(savedFile); } } out.print("upload succeed"); } catch (Exception e) { e.printstacktrace(); } %>

File upload

示例4

利用Servlet来实现文件上传。

Upload.java

package com.zj.sample; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; 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.disk.diskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; @SuppressWarnings("serial") public class Upload extends HttpServlet { private String uploadpath = "D:\temp"; // 上传文件的目录 private String tempPath = "d:\temp\buffer\"; // 临时文件目录 File tempPathFile; @SuppressWarnings("unchecked") public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, servletexception { try { // Create a factory for disk-based file items diskFileItemFactory factory = new diskFileItemFactory(); // Set factory constraints factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb factory.setRepository(tempPathFile);// 设置缓冲区目录 // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Set overall request size constraint upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB List items = upload.parseRequest(request);// 得到所有的文件 Iterator i = items.iterator(); while (i.hasNext()) { FileItem fi = (FileItem) i.next(); String fileName = fi.getName(); if (fileName != null) { File fullFile = new File(fi.getName()); File savedFile = new File(uploadpath, fullFile.getName()); fi.write(savedFile); } } System.out.print("upload succeed"); } catch (Exception e) { // 可以跳转出错页面 e.printstacktrace(); } } public void init() throws servletexception { File uploadFile = new File(uploadpath); if (!uploadFile.exists()) { uploadFile.mkdirs(); } File tempPathFile = new File(tempPath); if (!tempPathFile.exists()) { tempPathFile.mkdirs(); } } }

 demo4.html

File upload // action="fileupload"对应web.xml中中的设置. File:

web.xml

Uploadcom.zj.sample.UploadUpload/fileupload

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小编。

今天关于使用Apache Commons文件上载API在Jsp中上载多个文件apache运行jsp的讲解已经结束,谢谢您的阅读,如果想了解更多关于Android:使用Apache Commons Compress 7zip一个文件夹、Apache Commons FileUpload实现文件上传、Apache Commons fileUpload实现文件上传之一、Apache Commons fileUpload文件上传多个示例分享的相关知识,请在本站搜索。

本文标签: