- 浏览: 1229564 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
引用:
http://luoke920.iteye.com/blog/271257
相关文章也可以看一下:
http://www.jspcn.net/htmlnews/2005011.html
http://www.jspcn.net/htmlnews/2005024.html
http://www.jspcn.net/htmlnews/20050115.html
一文中使用FileUpload组件实现多文件的上传。。。
经个人测试,组件本身使用上没有问题,不过因为考虑客户端和服务器有可能是linux主机的原因,在具体调用方面我做了一些改进。。。
本教程以Apache组织的commons项目中的FileUpload项目做为jsp的文件上传组件,FileUpload项目完全尊守RFC1867规范中
关于在HTTP request 中通过Post方法提交文件的规范,该项目性能稳定快速,易于部署和使用.
本次教程以前端jsp + 后端 servlet的方式上传文件,你也可以完全在jsp中实现而不用servlet.
在开始之前你要准备以下几个东西:
1. commons-FileUpload 1.2.1 包
下载地址:http://jakarta.apache.org/commons/fileupload/
具体地址:http://commons.apache.org/downloads/download_fileupload.cgi
下载Binary下的zip即可。
2. commons-IO 1.4 包
下载地址:http://jakarta.apache.org/commons/io/
具体地址:http://commons.apache.org/downloads/download_io.cgi
下载Binary下的zip即可。
3. Commons-BeanUtils 1.8 包
下载地址:http://jakarta.apache.org/commons/beanutils/
具体地址:http://commons.apache.org/downloads/download_beanutils.cgi
下载Binary下的zip即可。
好了下载完成后,解压得到5个jar包:分别是:
commons-beanutils-1.8.0.jar
commons-beanutils-bean-collections-1.8.0.jar
commons-beanutils-core-1.8.0.jar
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
配置好开发环境后:如果没配置好可以看:
http://blog.csdn.net/luweifeng1983/archive/2008/12/23/3590726.aspx
用的是Eclipse3.4 + tomcat5.5并已有tomcat插件一起的。(jdk1.3或1.5的都可,已测试)
新建一个项目名叫Upload
建立好后将类文件输出目录改为:Upload/WebContent/WEB-INF/classes
接下来将上面5个jar包拷贝到WEB-INF/lib目录。。
!!说到这里要注意一个问题,那就是lib下的jar文件和eclipse工程下的jar放置的区别,一般你要使用你的代码拷到别的电脑上也能运行就把所有的jar都先拷到lib下,然后在eclipse的build path下点add jars将lib中的jar加进来就行了。。
下面就分别建一个jsp和一个servlet。。
如下:upload.jsp
- <%@pagelanguage="java"contentType="text/html;charset=UTF-8"
- pageEncoding="UTF-8"%>
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
- <title>Inserttitlehere</title>
- </head>
- <body>
- <formname="upform"action="UploadServlet"method="POST"enctype="multipart/form-data">
- <inputtype="file"name="file1"id="file1"/><br/>
- <inputtype="file"name="file2"id="file2"/><br/>
- <inputtype="file"name="file3"id="file3"/><br/>
- <inputtype="submit"value="Submit"/><br/>
- <inputtype="reset"/>
- </form>
- </body>
- </html>
UploadServlet.java
- packagecom.gobusiness.eus.servlet;
- importjava.io.BufferedInputStream;
- importjava.io.BufferedOutputStream;
- importjava.io.File;
- importjava.io.FileOutputStream;
- importjava.io.IOException;
- importjavax.servlet.ServletException;
- importjavax.servlet.http.HttpServletRequest;
- importjavax.servlet.http.HttpServletResponse;
- importorg.apache.commons.fileupload.FileItemIterator;
- importorg.apache.commons.fileupload.FileItemStream;
- importorg.apache.commons.fileupload.disk.DiskFileItemFactory;
- importorg.apache.commons.fileupload.servlet.ServletFileUpload;
- importorg.apache.commons.fileupload.util.Streams;
- /**
- *ServletimplementationclassforServlet:UploadServlet
- *
- */
- publicclassUploadServletextendsjavax.servlet.http.HttpServletimplements
- javax.servlet.Servlet{
- FiletmpDir=null;//初始化上传文件的临时存放目录
- FilesaveDir=null;//初始化上传文件后的保存目录
- publicUploadServlet(){
- super();
- }
- protectedvoiddoGet(HttpServletRequestrequest,
- HttpServletResponseresponse)throwsServletException,IOException{
- doPost(request,response);
- }
- protectedvoiddoPost(HttpServletRequestrequest,
- HttpServletResponseresponse)throwsServletException,IOException{
- try{
- if(ServletFileUpload.isMultipartContent(request)){
- DiskFileItemFactorydff=newDiskFileItemFactory();//创建该对象
- dff.setRepository(tmpDir);//指定上传文件的临时目录
- dff.setSizeThreshold(1024000);//指定在内存中缓存数据大小,单位为byte
- ServletFileUploadsfu=newServletFileUpload(dff);//创建该对象
- sfu.setFileSizeMax(5000000);//指定单个上传文件的最大尺寸
- sfu.setSizeMax(10000000);//指定一次上传多个文件的总尺寸
- FileItemIteratorfii=sfu.getItemIterator(request);//解析request
- //请求,并返回FileItemIterator集合
- while(fii.hasNext()){
- FileItemStreamfis=fii.next();//从集合中获得一个文件流
- if(!fis.isFormField()&&fis.getName().length()>0){//过滤掉表单中非文件域
- StringfileName=fis.getName().substring(
- fis.getName().lastIndexOf("\\"));//获得上传文件的文件名
- BufferedInputStreamin=newBufferedInputStream(fis
- .openStream());//获得文件输入流
- BufferedOutputStreamout=newBufferedOutputStream(
- newFileOutputStream(newFile(saveDir
- +fileName)));//获得文件输出流
- Streams.copy(in,out,true);//开始把文件写到你指定的上传文件夹
- }
- }
- response.getWriter().println("Fileuploadsuccessfully!!!");//终于成功了,还不到你的上传文件中看看,你要的东西都到齐了吗
- }
- }catch(Exceptione){
- e.printStackTrace();
- }
- }
- publicvoidinit()throwsServletException{
- /*对上传文件夹和临时文件夹进行初始化*/
- super.init();
- StringtmpPath="c:\\tmpdir";
- StringsavePath="c:\\updir";
- tmpDir=newFile(tmpPath);
- saveDir=newFile(savePath);
- if(!tmpDir.isDirectory())
- tmpDir.mkdir();
- if(!saveDir.isDirectory())
- saveDir.mkdir();
- }
- }
web.xml
- <?xmlversion="1.0"encoding="UTF-8"?>
- <web-appid="WebApp_ID"version="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <display-name>
- Upload</display-name>
- <servlet>
- <description>
- </description>
- <display-name>
- UploadServlet</display-name>
- <servlet-name>UploadServlet</servlet-name>
- <servlet-class>
- com.gobusiness.eus.servlet.UploadServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>UploadServlet</servlet-name>
- <url-pattern>/UploadServlet</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- <welcome-file>index.htm</welcome-file>
- <welcome-file>index.jsp</welcome-file>
- <welcome-file>default.html</welcome-file>
- <welcome-file>default.htm</welcome-file>
- <welcome-file>default.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
好了,文件建立好后,在eclipse下直接部署再启动Tomcat访问upload.jsp再上传文件(这里可以一次上传三个文件),当然可以使用js实现提交更多的文件上传。。。
当然你也可以把你的upload项目整个拷贝到tomcat的webapps目录下,启动tomcat.然后
打开IE浏览器在地址栏中输入http://localhost:8080/upload/upload.jsp
如:我要上传的文件位于:D:\import file下,文件名分别为:
CNIL0437.TXT
GIDL0437.TXT
MSGL0437.TXT
上传成功后,这三个文件将被上传到了c:\updir下面。。。,如果在c:\updir下面找到了这三个文件说明上传已经成功了。。
好了,上面的步骤其实http://luoke920.iteye.com/blog/271257已经讲得详细了,只是我把自己的部署、测试加进去了而以。那么我现在要对它进行一些改进。。。
首先第一:
- #publicvoidinit()throwsServletException{
- #/*对上传文件夹和临时文件夹进行初始化*/
- #super.init();
- #StringtmpPath="c:\\tmpdir";
- #StringsavePath="c:\\updir";
- #tmpDir=newFile(tmpPath);
- #saveDir=newFile(savePath);
- #if(!tmpDir.isDirectory())
- #tmpDir.mkdir();
- #if(!saveDir.isDirectory())
- #saveDir.mkdir();
- #
- #}
即它创建tempdir和updir是在servlet的init方法里面创建的,我们知道init方法只在servlet第一次被加载的时候执行,那么第一次创建成功后,如果后来的程序对这个目录做了修改或删除,那么从些以后就再也不能创建这两个目录了。。。
所以对创建目录的工作应该放到post方法里面。。。
第二:我们应该注意到程序在服务器上创建目录然后把文件上传到这两个目录(先放到temdir再到updir),如果我的服务器是linux主机怎么办,能用?
- 1.StringtmpPath="c:\\tmpdir";
- 2.StringsavePath="c:\\updir";
显然不能,所以创建目录时要使用File.separator.
不过如果实在不想用File.separaotr,至少也要用/updir,而不是使用\\,因为\\在linux下是肯定没用的。。
第三:下面语句用于获取上传文件的文件名,即D:\import file\CNIL0437.TXT,也就是说要获得CNIL0437.TXT
- StringfileName=fis.getName().substring(
- fis.getName().lastIndexOf("\\"));//获得上传文件的文件名
但上面的语句实际上只针对window客户端才有用,因为实际上上面的语句如果客户端使用的是window系统,上传文件时fis.getName()返回的是D:\\import file\\CNIL0437.TXT
而这里也有一个要注意的地方就是即使在windows的客户端得到的fileName也是\CNIL0437.TXT而不是CNIL0437.TXT,这里因为
举例:"abchang".substring(2) = "chang".也就是substring(n)实际上是取第n+1到最后的字符。。所以这里应该改为
- StringfileName=fis.getName().substring(
- fis.getName().lastIndexOf("\\")+1);//获得上传文件的文件名,客户端为windows
- if(fis.getName().lastIndexOf("\\") == -1){
- fileName=fis.getName().substring(
- fis.getName().lastIndexOf("/")+1);//获得上传文件的文件名,客户端为linux或unix
- }
上面lastIndexOf当找不到“\\”时默认返回值为-1
第四:下面语句
- BufferedOutputStreamout=newBufferedOutputStream(
- newFileOutputStream(newFile(saveDir
- +fileName)));//获得文件输出流
上面saveDir是一个File的实例,而更奇怪的是这个程序确实可以运行,说实话我现在没有明白这个语句编译器没有报错:newFile(saveDir +fileName)
因为File的构造函数中好象没有File(File+ String) 这么的构造函数。。这个问题??保留。。有看到这个问题并知道的可以解释一下。。。
jdk api:中只有new File(File,String)构造函数,经测试这里使用:new File(saveDir,fileName)也可以。
这里同样有使用File.separator的问题:这里因为上面取得的fileName是\CNIL0437.TXT,而我改正后的是CNIL0437.TXT。。所以这里也必须改。。
改正后为:
- newFileOutputStream(newFile(savePath+File.separator+fileName)));//获得文件输出流
注意我改成了savePath 因为savePath 是String类型的。。
好了这个程序到这里改得基本差不多了。。。
下面看看我实际应用的环境:
服务器:jboss3.2.0
eclipse 1.3.1
服务器:windows和linux都有,正因为这个所以上面改进了一些地方,总结起来就是在new File的时候里面应该使用File.separator,但在外面普通字符串来写目录的时候一般不要使用。。。
另外一般把目录写成相对目录,然后保存在属性文件中,注意的是:服务器不同,这两个属性文件配置的目录也有些不同。。好了看我下面的实现
sys.properties文件
windows服务器
说大了就是编程要注意细节,要尽量去完善代码。。。这样才能使代码不会因环境变化一下就不能运行。。。。
前面讲过可以实现更多文件上传,这里只需要改一下jsp页面就行了,改进后的代码如下:
upload.jsp
最近查看fileupload的api的时候发现有另一种迭代及写文件的方式如下:
parseRequest
,而前面的例子使用的是该类返回FileItemIterator的getItemIterator
方法
发表评论
-
JAVA短信发送及JAVA发送http请求与处理
2016-06-22 14:34 606JAVA发送HTTP请求与处理参考: http://ww ... -
Java Zip应用
2016-06-22 14:30 644应用系统中使用jdk原生 ... -
模拟tomcat进行http请求及响应处理:BufferedReader类的readLine在socket网络编程应用时发生阻塞
2016-05-11 15:04 1763最近写一个简单的程序模拟tomcat进行http请求及响应 ... -
Castor-xml映射出现节点重复问题解决
2015-08-13 16:24 1210最近在使用Castor-xml生成XML时发现生成的格式不 ... -
Add directory entries问题
2014-08-05 10:24 1898用spring注解的项目,eclipse可以运行,打成jar ... -
BeanUtils.copyProperties与PropertyUtils.copyProperties用法及区别
2013-01-25 16:21 886http://www.cnblogs.com/fayf/ar ... -
java.net.BindException: Cannot assign requested address
2012-06-13 14:10 893转:http://wgkgood.blog.51cto ... -
Duplicate name in Manifest: Depends-On
2012-06-13 13:13 1645解决方法:http://ww2.sjc.edu/faculty ... -
java tree
2011-11-16 02:01 1294import java.util.ArrayList; im ... -
jacob操作word和excel
2011-07-28 17:00 906http://danadler.com/jacob/ -
获得PrepareStatement 的最终执行语句
2011-07-04 10:07 1017方法一:http://www.blogjava.net/ ... -
Non-terminating decimal expansion; no exact representable decimal result
2011-06-24 16:03 2613由于需要处理精度比较高的浮点数,所以弃用double类型,改用 ... -
JXLS应用示例
2011-06-03 01:41 3496JXLS在循环的记录前加序号: <jx:f ... -
月份加减方法处理
2011-06-03 00:52 921private static String monthAdd ... -
JAVA 5.0 后 自带监控工具 jps、jinfo、jstat、jma
2011-05-12 16:25 1242最近有个客户要进行WebLogic性能调优,但因为他们没有性能 ... -
定时器的实现、java定时器介绍与Spring中定时器的配置
2011-04-28 15:05 25441定时器的作用 在实际的开发中,如果项目中需要定时执行或者需 ... -
ClientAbortException,Connection reset by peer: socket write error
2011-03-07 11:24 6105extremetable导出excel,弹出一个下载窗口,这 ... -
java 调ireport (javaBean数据源)保存服务器 生成word
2011-02-24 14:40 1563package com.ztesoft.bidding.con ... -
JAVA包生成EXE应用实例
2011-01-06 15:35 1036相关文章:http://blog.csdn.net/fresh ... -
RMI客户端调用远程服务器方法-远程方法调用
2010-12-27 16:45 2752RMI软件下载:http://www.genady.net/r ...
相关推荐
在Java Web开发中,文件的上传与下载是常见的功能需求,尤其...通过以上步骤,你可以实现基于Java Servlet和Apache Commons库的文件上传与下载功能。理解并熟练掌握这些知识点,对于开发高效、稳定的Web应用至关重要。
"jsp+servlet+fileupload文件上传" 这个标题表明这是一个关于使用Java Web技术进行文件上传的教程。JSP (JavaServer Pages) 是一种动态网页技术,Servlet是Java EE中的一个核心组件,常用于处理HTTP请求。FileUpload...
在JSP应用中,我们通常会结合Servlet来实现文件上传,因为JSP本身不支持处理文件上传的POST请求。 1. **添加依赖**:在使用FileUpload组件之前,需要将其jar包引入到项目中。提供的压缩包文件"fileupload"很可能...
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
在这个主题中,“jsp+servlet实现文件上传和下载”是核心知识点,我们将深入探讨如何利用这两个组件以及Apache的`commons-fileupload`和`commons-io`库来完成这一任务。 1. **文件上传** 文件上传通常涉及用户通过...
### Common-fileupload组件实现文件上传 #### 一、概述 在现代Web开发中,文件上传是一项常见的需求。尤其是在Java Web应用程序中,实现文件上传功能变得越来越简单,这得益于丰富的开源库支持。Common-fileupload...
在本文中,我们将深入探讨如何使用Java的JSP(JavaServer Pages)和Servlet技术来实现一个图片上传功能。这是一个常见的Web开发任务,特别是在构建交互性强、动态内容丰富的网站时。以下是一些关键知识点: 1. **...
以下是使用Servlet和JSP实现文件上传的基本步骤: 1. **配置依赖**:在项目中添加Apache Commons FileUpload和IO库。这两个库可以通过Maven或Gradle等构建工具导入,或者手动下载jar文件并添加到项目的类路径中。 ...
总的来说,虽然不使用Apache的FileUpload组件,但通过JSP和Servlet,我们可以自定义实现文件上传功能。这种方法虽然更复杂,但能让我们更好地理解文件上传的底层原理,并且在某些情况下,如对性能有特殊要求或避免...
它支持多文件上传、断点续传、文件大小限制等功能,可以有效避免传统FileUpload类的复杂性。 **4. 文件上传流程** 使用SmartUpload进行文件上传的步骤大致如下: - 在Servlet中实例化SmartUpload对象。 - 调用...
在本文中,我们将深入探讨如何使用Apache Commons FileUpload组件来实现文件上传功能。Apache Commons FileUpload是一个用于处理HTTP请求中的多部分数据的Java库,它使得在Servlet或JSP应用中处理文件上传变得简单易...
【标题】"上传下载仿163网盘无刷新文件上传 for Jsp-fileupload-jsp-project" 提供了一个实现无刷新文件上传的示例,它基于Java技术,特别是JSP和Servlet,以及Apache的FileUpload组件。这个项目旨在创建一个类似于...
"commons-fileupload实现jsp上传实例(源码)" 这个标题表明了我们讨论的主题是关于使用Apache Commons FileUpload库在JavaServer Pages (JSP)中实现文件上传的功能,并且提供了源代码作为参考。Apache Commons ...
在IT行业中,文件上传是Web应用中常见的功能之一,Apache Commons FileUpload组件是Java领域处理文件上传的标准库。本文将详细解析"commons-fileupload组件上传问题",并结合提供的资源来探讨如何解决这类问题。 ...
在上述例子中,我们看到了使用Commons FileUpload实现文件上传的步骤: 1. 创建上传页面:HTML表单使用`enctype="multipart/form-data"`属性,指定上传文件的类型。在`<input type="file">`标签中,用户可以选择要...
本教程将详细讲解如何使用JSP和Servlet实现文件上传,以及相关的知识点。 一、JSP与Servlet基础 1. JSP:是一种动态网页技术,它允许在HTML页面中嵌入Java代码,使得页面具有动态性。服务器接收到客户端请求后,会...
总的来说,这个项目展示了如何利用JSP和Servlet来实现一个基本的文件上传下载系统,涵盖了Web开发中的基础技术,对于学习Java Web开发的初学者来说,是一个很好的实践案例。在实际应用中,还可以进一步优化,如增加...
在这个“struts+上传下载+servlet+jsp”项目中,我们将探讨这些技术如何协同工作以实现文件的上传和下载功能。 **Struts框架**: Struts是一个开源的MVC框架,它简化了Java Web应用的开发过程。在Struts中,...
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...