- 浏览: 1010341 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (394)
- OSGI (14)
- 多线程 (10)
- 数据库 (30)
- J2ME (1)
- JAVA基础知识 (46)
- 引用包 (1)
- 设计模式 (7)
- 工作流 (2)
- Ubuntu (7)
- 搜索引擎 (6)
- QT (2)
- Ubuntu下编程 (1)
- 小程序 (2)
- UML (1)
- Servlet (10)
- spring (16)
- IM (12)
- 文档视频转为flash格式在线播放 (19)
- Maven (8)
- 远程调用 (2)
- PHPRPC (1)
- EXTJS学习 (2)
- Hibernate (16)
- 技术文章 (38)
- flex (5)
- 海量数据处理 (5)
- FTP (8)
- JS (10)
- Struts (1)
- hibernate search (13)
- JQuery (2)
- EMail (3)
- 算法 (4)
- SVN (7)
- JFreeChart (4)
- 面试 (4)
- 正规表达式 (2)
- 数据库性能优化 (10)
- JVM (6)
- Http Session Cookie (7)
- 网络 (12)
- Hadoop (2)
- 性能 (1)
最新评论
-
hy1235366:
能够随便也发一下,你退火算法程序使用的DistanceMatr ...
模拟退火算法总结(含例子)(转) -
梅强强:
感谢分享。。帮大忙了
swftools转换文件时线程堵塞问题的解决方法 -
wenlongsust:
openoffice和文件不在同一个服务器上,用过吗?
[JODConverter]word转pdf心得分享(转) -
2047699523:
如何在java Web项目中开发WebService接口htt ...
利用Java编写简单的WebService实例 -
abingpow:
唉,看起来好像很详细很不错的样子,可惜不是篇面向初学者的文章, ...
Spring与OSGi的整合(二)(转)
所需包:commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar 工作需要,以前都是直接用struts框架中的上传组件,很好用,但是现在没有用框架了,只用jsp上传还不会了,现在学习了一下,做好备份,希望下次能用的上。 前台页面不用多说 主要是表单中设置 enctype="multipart/form-data" 很重要。 处理上传jsp文件
//判断表单是否是Multipart类型的。这里可以直接对request进行判断 if (ServletFileUpload.isMultipartContent(request)) { // 创建文件处理工厂,它用于生成 FileItem 对象。 DiskFileItemFactory factory = new DiskFileItemFactory(); //设置文件的缓存路径 String tempdir =this.getServletContext().getRealPath("/upload/temp"); java.io.File d = new java.io.File(savedir); if(!d.exists()){ d.mkdirs(); } factory.setSizeThreshold(1024*1024); // 设置最多只允许在内存中存储的数据,单位:字节 factory.setRepository(d); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录(默认可以不用设置) // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // 设置允许用户上传文件大小,单位:字节 upload.setSizeMax(yourMaxRequestSize); //上传文件,并解析出所有的表单字段,包括普通字段和文件字段 List items = upload.parseRequest(request); //下面对每个字段进行处理,分普通字段和文件字段 Iterator it = items.iterator(); while(it.hasNext()){ FileItem fileItem = (FileItem) it.next(); //如果是普通字段 if(fileItem.isFormField()){ //是普通的字段 System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + new String(fileItem.getString().getBytes("iso8859-1"), "gbk")); fileItem.getFieldName();//得到字段name属性的值 fileItem.getName();//得到file字段的文件名全路径名,如果不是file字段,为null fileItem.getString();//得到该字段的值,默认的编码格式 fileItem.getString("UTF-8");//指定编码格式 }else{//文件字段 System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " +//得到file字段的文件名全路径名 fileItem.isInMemory() + " " +//用来判断FileItem类对象封装的主体内容是存储在内存中,还是存储在临时文件中,如果存储在内存中则返回true,否则返回false fileItem.getContentType() + " " +//文件类型 fileItem.getSize()); //文件大小 //什么东西都有了 ,想怎么处理都可以了 //保存文件,其实就是把缓存里的数据写到目标路径下 if(fileItem.getName()!=null && fileItem.getSize()!=0){ File fullFile = new File(fileItem.getName()); File newFile = new File("c:/temp/" + fullFile.getName()); try { fileItem.write(newFile); } catch (Exception e) { e.printStackTrace(); } }else{ System.out.println("文件没有选择 或 文件内容为空"); }
另转:
如果 enctype 类型为 multipart/form-data 的话,使用 request.getParameter 是得不到数据的。
你已经使用 FileUpload,那就肯定获得了 org.apache.commons.fileupload.servlet.ServletFileUpload 对象。通过 List<FileItem> fileItems = fileUpload.parseRequest(request) 获得 List<FileItem> 集合。
遍历这个集合,在 FileItem 中有 isFormField 方法,如果为 true 表示是字段值,否则就是文件域。
使用 FileItem#getFieldName() 获得 form 表单中的各控件的 name,
FileItem#getString 获得非文件域的值。
如果是文件域,使用 FileItem#get() 获得上传文件的字节数组,
FileItem#getContentType() 获得上传的文件类型,
FileItem#getSize() 获得文件大小,
FileItem#getName() 获得上传的原始文件名。
在这里。我们将要描述fileupload的基本使用方法,然后解释一些更简单的,以及最常用的使用模式。fileupload的个性化在这里得到了描述。
//检查是否是一个文件上传请求
boolean isMultipart = FileUpload.isMultipartContent(request);
--------------------------------------------------------------------------------
比较大的文件上传选项必须写入到磁盘的临时文件中去;
大文件上传请求必须不被允许;
默认的驻留内存的选项的最大大小,最大允许的上传文件请求,和临时文件的存储地方是可以接受的;
在这种情景下处理这样一个请求并不是很简单的:
--------------------------------------------------------------------------------
DiskFileUpload upload = new DiskFileUpload();
//解析请求
List /* FileItem */ items = upload.parseRequest(request);
--------------------------------------------------------------------------------
解析的结果是一个文件项目的List,每一个都实现了FileItem接口。处理这些项目将在下面讨论。
--------------------------------------------------------------------------------
//创建一个新的文件上传句柄 DiskFileUpload upload = new DiskFileUpload(); //设置上传参数 upload.setSizeThrehold(最大内存大小); upload.setSizeMax(最大请求大小); upload.setRepositoryPath(临时目录); //解析请求 List /* FileItem */ items = upload.parseRequest(request);
当然,每个配置方法都是独立于其它的,但是如果你想一次就配置它们,你可以使用可选的parseRequest()方法,像这样:
如果你想更多地控制请求的解析,比如把上传选项存储到其它地方,例如,存到数据库中-你可以参照自定义FileUpload。 对于一个规则的表单域来说,你对它感兴趣的可能就只有它的名字以及它的字符串值。你也会想到,处理它们是简单的: 而对于一个文件的上传,在你处理它的内容之前,可以有好多令你想知道的不同的东西,这里有一个采用了一些你可能感兴趣的方法的例子 对于这些上传的文件,你一般不想通过内存来存取它们,除非它们很小,或者你没有其它好的方法,更进一步,你想将内容当作文件流来处理,或者将整个文件写到最终的地址。FileUpload提供了简单的方法来完成这些 操作。
// 建立一个新的文件上传句柄
DiskFileUpload upload = new DiskFileUpload();
// 解析请求
List /* FileItem */ items = upload.parseRequest(request,
内存大小, 允许上传的最大文件, 临时目录);
处理上传选项
一旦解析过程完毕,你就可以获得一个文件选项的List,以便进一步处理。在大多数情况下,你将会根据规则的表单域来不同地处理文件的上传。所以你可能以这样的方式来处理:// 处理上传的选项
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
processFormField(item);
} else {
processUploadedFile(item);
}
}
//处理一个规则表单域
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
...
}
// 处理一个文件上传
if (!item.isFormField()) {
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
...
}
// 处理一个文件上传的情况
if (writeToFile) {
File uploadedFile = new File(...);
item.write(uploadedFile);
} else {
InputStream uploadedStream = item.getInputStream();
...
uploadedStream.close();
}
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
// 在内存中处理一个上传的文件
byte[] data = item.get();
...
应用,这个已经超出了本文档的讨论范围。
下一步是什么
希望这个页面能提供给你一个好的意见,让你在你自己的应用中能使用FileUpload。更多关于这里介绍的方法,以及其它可用的方法,你可以参照api文档。这里介绍的用法已经可以满足大多数的文件上传的需要了,当然,如果你还有更多的复杂的需求,使用它的灵活的自定义配置的能力,FileUpload一定可以能够帮助你。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Upload Page</title>
</head>
<body>
<!-- 必须写 enctype="multipart/form-data" !!! -->
<form method="post" action="upload" style=" text-align: center" enctype="multipart/form-data">
<input type="file" name="file1"><br>
<input type="file" name="file2"><br>
<input type="file" name="file3"><br>
<input type="submit" name="submit">
</form>
</body>
</html>
web.xml
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>UpLoadAction</servlet-name>
<servlet-class>com.hygj.furong.servlet.UpLoadAction</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UpLoadAction</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
UpLoadAction.java
package com.hygj.furong.servlet;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
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.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UpLoadAction extends HttpServlet {
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to
* post.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置长传文件的最大值:5M
final long MAX_SIZE = 5 * 1024 * 1024;
// 设置允许上传文件格式的列表
final String[] allowedExt = new String[] { "jpg", "jpeg", "gif", "txt",
"doc", "docx", "mp3", "wma", "m4a", "rar" };
response.setContentType("text/html");
// 字符编码为UTF-8
response.setCharacterEncoding("UTF-8");
// 实例化一个硬盘文件工厂,用来配置文件组建ServletFileUpload
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置长传文件时用于临时存放文件的内存大小,这里是4K,多余的部分将临时存在硬盘
factory.setSizeThreshold(4096);
// 设置存放临时文件的目录,web根目录下的UploadTemp目录
factory
.setRepository(new File(request.getRealPath("/") + "UploadTemp"));
/**
* 用以上工厂实例化长传组件
*/
ServletFileUpload sfu = new ServletFileUpload(factory);
// 设置最大上传尺寸
sfu.setSizeMax(MAX_SIZE);
PrintWriter out = response.getWriter();
// 从request得到 所有 上传域的列表
List fileList = null;
try {
fileList = sfu.parseRequest(request);
} catch (Exception e) {
// 处理文件尺寸过大异常
if (e instanceof SizeLimitExceededException) {
out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />");
out.println("<a href=\"index.jsp\">返回</a>");
return;
}
System.out.println(e.getMessage());
}
// 没有文件长传
if (fileList == null || fileList.size() == 0) {
out.println("请选择文件上传--没有文件长传");
out.println("<a href=\"index.jsp\">返回</a>");
return;
}
// 得到所有上传的文件
Iterator fileItr = fileList.iterator();
// 循环处理所有文件
while (fileItr.hasNext()) {
FileItem fileItem = null;
String path = "";
long size = 0;
// 获取当前文件
fileItem = (FileItem) fileItr.next();
// 忽略简单form字段 而不是 上传域的文件域(<input type="text" />等)
if (fileItem == null || fileItem.isFormField()) {
continue;
}
// 获取文件的完整路径
path = fileItem.getName();
// 获取文件大小
size = fileItem.getSize();
if ("".equals(path) || size == 0) {
out.println("请选择文件上传--大小为0");
out.println("<a href=\"index.jsp\">返回</a>");
return;
}
// 得到去除路径的文件名
String realName = path.substring(path.lastIndexOf("\\") + 1);
// 得到文件的拓展名(无拓展名时将得到全名)
String extName = realName.substring(realName.lastIndexOf(".") + 1);
// 拒绝接收规定文件格式之外的文件类型
int allowFlag = 0;
int allowedExtCount = allowedExt.length;
for (; allowFlag < allowedExtCount; allowFlag++) {
if (allowedExt[allowFlag].equals(extName)) {
break;
}
}
if (allowFlag == allowedExtCount) {
out.println("请上传一下类型的文件");
for (allowedExtCount = 0; allowFlag < allowedExtCount; allowFlag++) {
out.println("*" + allowedExt[allowFlag]
+ " ");
}
out.println("<a href=\"index.jsp\">返回</a>");
return;
}
long now = System.currentTimeMillis();
// 根据系统时间生成上传够保存的文件名
String prefix = String.valueOf(now);
// 保存的最终文件完整路径,保存在web根目录下的UploadFile目录下
String finalName = request.getRealPath("/") + "/UploadFile/"
+ prefix + "." + extName;
try {
// 保存文件
fileItem.write(new File(finalName));
out.println("文件上传成功. 路径:"+request.getRealPath("/")+ "/UploadFile目录下 "+" 以保存为:" + prefix + "." + extName
+ " 文件大小:" + size + "字节<br>");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
out.println("<a href=\"index.jsp\">继续上传</a>");
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException
* if an error occure
*/
public void init() throws ServletException {
// Put your code here
}
}
评论
Chrome下面获取到的是文件的名称,并不是完整的路径,请问这个该如何解决?
发表评论
-
提取html内容放入xml文件时空格问题
2011-05-24 17:09 2659由于项目的需要,将网站上的信息抓取下来,提取出想要的信息,然后 ... -
简述URI和URL区别(转)
2011-04-20 16:23 1418URL:(Uniform Resoure Locato ... -
jsp页面乱码解决方案及编码设置问题(转)
2011-03-27 15:46 1841经常遇到关于JSP页面乱码的问题,在网上也查了相关的帖子,故在 ... -
使用JSTL标签异常
2011-01-02 09:48 1851我使用JSTL标签,如下所示: <c:when ... -
HSQL入门及使用指南 (转)
2010-12-27 22:29 2191HSQL可以到官方网站 ... -
使用POI读取Word207和Excel2007的例子 (转)
2010-12-26 16:19 2618天在写全文检索功能时,POI读取Word2007和Excel2 ... -
SSH session连接关闭问题的解决(转)
2010-12-15 22:12 21532008-07-20 22:25:27,531 INF ... -
svn和myeclipse使用搜狗浏览器代理
2010-12-11 16:42 18141 在svn里的setting功能选项中选择Network,勾 ... -
Kissy Suggest 自动提示例子
2010-12-10 14:45 3823由淘宝团队开发出来的Kissy Suggest 自动提示组件是 ... -
计算机开机启动过程详解(转)
2010-12-10 13:22 13901、http://product.zdnet.com. ... -
更强的自动补全提示:提示补全组件:Kissy Suggest(转)
2010-12-09 16:25 1059去年针对谷歌的搜索提示,发过一篇文章:从谷歌的一个Bug说 ... -
磁盘分区与文件系统(转)
2010-12-09 09:38 2046一个磁盘是分成一个个扇区来存放信息,整个磁盘的第一个扇区是作 ... -
QQ通信原理(转)
2010-12-02 21:52 6659QQ通信原理我研究的是QQ ... -
邮件激活
2010-11-17 09:34 1457今天看了一下公司做的网站,看到有关邮件激活的程序,就做下笔记。 ... -
HttpSessionBindingListener获取在线用户数(转)
2010-11-01 14:59 2369下面为我的测试 ... -
cookie的简单使用
2010-10-29 11:13 1575一、cookie的作用 在 ... -
Cookie工作原理(转)
2010-10-29 09:30 1824Cookies基础 Cookies是 ... -
swfobject的使用
2010-10-26 09:54 32231 swfobject可以将swf文件嵌入到网页内,它是一个j ... -
java获取当前工程名(转)
2010-10-24 09:14 1628String projectname = System.get ... -
利用Java编写简单的WebService实例(转)
2010-10-22 15:30 2740/* * File name: TestHell ...
相关推荐
本篇文章将详细讲解如何使用`Commons-FileUpload`进行文件上传,并读取上传文件的内容。 首先,了解`Commons-FileUpload`的工作原理。它解析HTTP请求,将多部分的数据分割成单独的部分,这些部分可以是文本或文件。...
这个"最全的common-FileUpload.jar包"结合了两个关键的Apache Commons库,为开发者提供了强大的文件上传解决方案,无论是小型项目还是大型企业级应用,都能从中受益。通过深入理解和有效利用这些工具,可以极大地...
commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-...
首先,我们来看一下标题:“利用Common-fileupload封装的文件上传组件...附上源码”。这表明我们将讨论如何使用这个库来创建一个文件上传系统,并且提供有源码可供参考。通过`Common-fileupload`,我们可以实现用户...
开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2...
4. 在Action类中,使用Common-FileUpload的FileItem接口处理上传的文件,将文件保存到服务器的指定位置。 5. 处理可能出现的异常,如文件类型不匹配、存储失败等,返回相应的提示信息。 通过这种方式,Struts2的...
在Java开发中,`common...总之,`common-io`和`common-fileupload`是Java开发中的强大工具,它们简化了常见的I/O操作和文件上传处理,提高了开发效率。了解并熟练运用这些库,能帮助开发者更好地应对实际项目中的挑战。
common-fileupload官方文档
这些库的组合使用,通常是为了构建一个能够处理文件上传、与MySQL数据库交互并且具有高效数据库连接管理的Java Web应用。具体来说: 1. Commons FileUpload:负责将HTTP请求中的多部分数据解析成一个个单独的文件或...
赠送Maven依赖信息文件:commons-fileupload-1.3.3.pom; 包含翻译后的API文档:commons-fileupload-1.3.3-javadoc-API文档-中文(简体)版.zip; Maven坐标:commons-fileupload:commons-fileupload:1.3.3; 标签:...
【使用commons-fileupload上传文件】 Apache Commons FileUpload是Apache组织的一个子项目,专注于处理HTTP文件上传。这个组件提供了一个简洁的API,使得开发者能够轻松地在Java应用中处理由浏览器发送的多部分...
在`MyProject`这个压缩包中,可能包含了使用`common-fileupload`进行文件上传和下载的示例代码,你可以解压后查看具体实现。通过阅读和理解代码,可以更好地掌握文件上传下载的实践应用。在实际开发中,结合源码和...
赠送Maven依赖信息文件:commons-fileupload-1.4.pom; 包含翻译后的API文档:commons-fileupload-1.4-javadoc-API文档-中文(简体)版.zip; Maven坐标:commons-fileupload:commons-fileupload:1.4; 标签:...
下面,我们将深入探讨如何使用`Commons FileUpload`库在Java中实现文件上传功能,并基于提供的"文件上传demo"进行分析。 首先,我们需要添加`Commons FileUpload`的依赖到我们的项目中。如果你使用的是Maven,可以...
"Common-FileUpload带进度条文件上传"是一个专门处理这种需求的解决方案,它允许用户在上传文件时看到进度条,提供更好的用户体验。下面我们将详细探讨这个主题以及相关知识点。 1. 文件上传的基本原理:在Web开发...
通过以上步骤,你可以成功地使用Apache Commons FileUpload实现文件上传和下载功能,并避免中文乱码问题。在实际开发中,还可以结合Spring MVC或Struts等框架,进一步简化代码和提高代码的可维护性。
本文将详细介绍如何使用 Commons-FileUpload 实现文件的上传和下载功能。 #### 一、环境搭建与依赖引入 1. **Maven 依赖**: - 在项目的 `pom.xml` 文件中添加 Commons-FileUpload 和 Commons-Io 的依赖。 ```...
总结来说,Struts1.2与Commons-Fileupload的结合使用,提供了一个简单而有效的文件上传解决方案。然而,这只是一个基本的实现,实际项目中可能还需要处理更多细节,比如错误处理、异常捕获、文件重命名策略、存储...
在Java开发中,上传文件是一项常见的任务,而`commons-fileupload-1.3.3.jar`和`commons-io-2.6.jar`是Apache Commons项目中的两个重要库,专门用于处理HTTP请求中的文件上传功能。这两个库为开发者提供了便捷、高效...
本篇将详细讲解如何使用Commons FileUpload来实现文件上传的功能。 首先,理解HTTP协议中的多部分数据是至关重要的。在HTML表单提交文件时,通常会使用`enctype="multipart/form-data"`属性,此时,数据会被分割成...