本文将带您了解关于使用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)
- Android:使用Apache Commons Compress 7zip一个文件夹
- Apache Commons FileUpload实现文件上传
- Apache Commons fileUpload实现文件上传之一
- Apache Commons fileUpload文件上传多个示例分享
使用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一个文件夹
我在我的.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是一个专注于可重用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包下载
<!-- 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实现文件上传之一的相关资料,需要的朋友可以参考下
废话不多说了,直奔主题了。
需要两个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文件上传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文件上传多个示例分享的相关知识,请在本站搜索。
本文标签: