- 浏览: 89570 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
ssy341:
说的简单了点,和官网的文档差不多,多文件上传也不是很好,不过可 ...
jQuery插件AjaxFileUpload文件上传实现Javascript多文件上传功能 -
蓝凝幽偌:
有没有jar包?
org.apache.commons.net.ftp.FTPClient 的简单用法 -
tinguo002:
在这里缓缓走过,很为楼主钻研精神感动,也感谢楼主分享。
关于Struts2资源文件的配置
使用COS组件实现文件上传
- 博客分类:
- java 学习
转自:http://blog.csdn.net/jadyer/article/details/6144885
这是一个Servlet应用。。
首先是web.xml
[xhtml] view plaincopyprint?
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>UploadServelt</servlet-name>
<servlet-class>com.jadyer.servlet.UploadServelt</servlet-class>
<!-- 指定所上传的文件,在上传成功后,保存在硬盘中的位置 -->
<init-param>
<param-name>savePath</param-name>
<param-value>D://mydata//upload</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>UploadServelt</servlet-name>
<url-pattern>/servlet/UploadServelt</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>upload.jsp</welcome-file>
</welcome-file-list>
</web-app>
<!--
曾有网友拿COS跟commons-fileupload和jspSmartUpload进行试验对比,试验过程如下
分别上传2MB、20MB、45MB、200MB的文件,并测试三种组件的花费时间,测试结果如下
文件小于2MB时,COS和FileUpload的上传速度差不多,但jspSmartUpload已显出弱势
随着文件的增大,FileUpload和SmartUpload的上传速度明显不如COS
当文件200MB时,SmartUpload已经不堪重负而崩溃
而此时COS所花费的时间比FileUpload要少了20多秒
毫无疑问,试验结果,COS的性能,当之无愧位居第一
-->
然后是用于收集所上传的文件信息的upload.jsp页面
[xhtml] view plaincopyprint?
<%@ page language="java" pageEncoding="UTF-8"%>
<form action="<%=request.getContextPath()%>/servlet/UploadServelt" enctype="multipart/form-data" method="POST">
用户:<input type="text" name="username"><br/>
密码:<input type="password" name="password"><br/>
性别:<input type="radio" name="sex" value="woman" checked>女
<input type="radio" name="sex" value="man">男<br/>
喜好:<input type="checkbox" name="like" value="sleep">睡觉
<input type="checkbox" name="like" value="coding" checked>写代码
<input type="checkbox" name="like" value="eat">吃饭<br/>
附件:<input type="file" name="file11"><br/>
附件:<input type="file" name="file22"><br/>
附件:<input type="file" name="file33"><br/>
<input type="submit" value="我要上传">
</form>
接着是自定义的用于解决上传的文件名冲突的命名策略类
[java] view plaincopyprint?
package com.jadyer.util;
import java.io.File;
import java.util.Date;
import com.oreilly.servlet.multipart.FileRenamePolicy;
/**
* 自定义的命名策略文件
* @see 用于解决上传文件的同名冲突问题
* @see 解决方法:文件名 + 时间戳 + 文件后缀
*/
public class RandomFileNamePolicy implements FileRenamePolicy {
public File rename(File file) {
/*
* 假设,我们上传了一个同名文件,文件名为【abcd.ccc】
*/
int index = file.getName().lastIndexOf("."); //获取文件名中【.】的下标
String body = file.getName().substring(0, index); //表示文件名的主题,即【abcd】
String postfix = ""; //表示文件名的后缀,即【.ccc】
String timer = ""; //代表当前系统时间的数字
//如果该文件的名字中,没有【.】的话,那么lastIndexOf(".")将返回-1
if (index != -1) {
timer = new Date().getTime() + ""; //在文件的名字前面,添加的表示当前系统时间的数字
postfix = file.getName().substring(index); //获取到文件名当中的【.ccc】
} else {
timer = new Date().getTime() + "";
postfix = ""; //如果lastIndexOf(".")返回-1,说明该文件名中没有【.】即没有后缀
}
String newName = body + timer + postfix; //构造新的文件名
return new File(file.getParent(), newName); //返回重命名后的文件
}
}
最后是用来处理文件上传的核心操作的Servlet
[java] view plaincopyprint?
package com.jadyer.servlet;
import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jadyer.util.RandomFileNamePolicy;
import com.oreilly.servlet.MultipartRequest;
/**
* 此时需要在该Web项目中引入cos.jar
* 可通过http://www.servlets.com/cos/cos-26Dec2008.zip下载
*/
public class UploadServelt extends HttpServlet {
private static final long serialVersionUID = -7946856825034537432L;
private String savePath;
public void init(ServletConfig config) {
//取得web.xml中配置的savePath参数的值
savePath = config.getInitParameter("savePath");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//指定所上传的文件,上传成功后,在硬盘上的保存位置
String saveDirectory = this.savePath;
//如果所指定的文件夹,在硬盘上不存在的话,则创建该文件夹
File fileDirectory = new File(saveDirectory);
if(fileDirectory.exists()){
System.out.println("提示:" + saveDirectory + "目录已存在");
}else{
//fileDirectory.mkdir();//此时如果使用mkdir()方法,文件夹将创建失败
//因为我们在web.xml中指定的<init-param-value>的值,包含父目录
fileDirectory.mkdirs();
System.out.println("成功创建" + saveDirectory + "文件夹");
}
//限定所上传文件的合计大小,默认为1MB。这里设置的不是单个文件,而是上传的所有文件的总大小
int maxPostSize = 8 * 1024 * 1024;
//可能会出现不同用户,上传同名文件的现象,所以我们应该采取某种手段,以解决文件名称冲突的问题
//在COS中有一个默认的命名策略DefaultFileRenamePolicy,只要存在重名现象,它就会在文件名后面加上1.2.3..等以示区分
//DefaultFileRenamePolicy dfrp = new DefaultFileRenamePolicy();
//MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize, "UTF-8", dfrp);
//本人测试的结果却是:若未显式new DefaultFileRenamePolicy(),此时若上传同名文件,则先前的文件会被后面上传的文件覆盖掉
//MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize, "UTF-8");
//我们也可以自定义命名策略文件。。我这里的解决办法是:文件名 + 时间戳 + 文件后缀
//在COS中自定义命名策略文件时,只需要实现FileRenamePolicy接口,并重写其rename(File file)方法即可
RandomFileNamePolicy rfnp = new RandomFileNamePolicy();
//完成文件上传
MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize, "UTF-8", rfnp);
//输出所上传的文件的信息
Enumeration fileNames = multi.getFileNames();
while(fileNames.hasMoreElements()){
String fileName = (String)fileNames.nextElement();
if(null != multi.getFile(fileName)){
String lastFileName = multi.getFilesystemName(fileName);
System.out.println("上传的文件: " + saveDirectory + "//" + lastFileName);
}
}
//输出所提交的表单中其它文本输入域的值
Enumeration formValue = multi.getParameterNames();
while(formValue.hasMoreElements()){
String param = (String)formValue.nextElement();
String value = multi.getParameter(param);
System.out.println(value);
}
//若知道前台表单输入域的name值,便可使用下面代码,更省事
System.out.println("用户:" + multi.getParameter("username"));
System.out.println("密码:" + multi.getParameter("password"));
System.out.println("性别:" + multi.getParameter("sex"));
for(String like : multi.getParameterValues("like")){
System.out.println("喜好:" + like);
}
}
}
/*************【MultipartRequest类中的几个实用方法】**************************************************/
//public Enumeration getFileNames()
//返回包含了所有上传的文件名称的一个Enumeration对象
//在Enumeration对象里面储存的是前台表单中<input type="file" name="">里面的name值
//public File getFile(String name)
//返回存储在服务器上的指定name的File对象。该name是<input type="file" name="">的name值
//若服务器上不存在该文件或者未上传该文件到服务器上,则返回null
//public String getFilesystemName(String name)
//返回所上传的文件,在服务器上的真正文件名。该name是<input type="file" name="">的name值
//如果在上传文件时,未指定FileRenamePolicy命名策略文件,则返回的是该文件上传之前的原始名称
//若服务器上不存在该文件或者未上传该文件到服务器上,则返回null
//public String getOriginalFileName(String name)
//返回所上传的文件,在命名策略文件生效前的文件名。该name是<input type="file" name="">的name值
//说白了,就是你上传的文件的本地的原始名字,而不是在上传到服务器之后,为解决同名现象而被重命名后的名字
//public Enumeration getParameterNames()
//返回前台表单中,除文件输入域外的,其它文本输入域的所有参数值
//在Enumeration对象里面,储存的是前台表单中的<input type="除file外" name="">里面的name值
//public String getParameter(String name)
//返回前台表单中,文本输入域的值。该name是表单中<input type="除file外" name="">里的name值
//如果前台表单中的name参数,对应有多个值,比如<input type="checkbox">
//那么此时,该方法将只会输出这多个值中的最后一个值
//所以,对于类似<input type="checkbox">而言,更推荐getParameterValues(String name)方法
/***************************************************************************************************/
/*************【略析COS组件中MultipartRequest构造方法】***********************************************/
//com.oreilly.servlet.MultipartRequest.MultipartRequest主要负责文件上传的处理
//MultipartRequest类共有8个构造函数,可参考官方文档,以下是对构造函数中参数的简要说明
//saveDirectory--指定所上传文件,在服务器端的存储目录
//maxPostSize----限制上传文件的合计大小。默认为1MB
//encoding-------解决上传文件名称的乱码问题
//policy---------解决上传文件名称的重名问题
/***************************************************************************************************/
/*************【关于maxPostSize参数的感言】**********************************************************/
//这里必须声明一点:MultipartRequest构造方法中的maxPostSize参数,网上存在一定的误解
//接触COS,是很偶然的:周三,QQ上,突然想要写一段代码,实现的是在两个JSP中上传一个图片
//要求:代码尽量少。原本我对IO流就没那么熟练,于是条件反射的就想用commons-fileupload组件
//结果,还是觉得不行,要求代码要尽量少啊。我一寻思,既如此,jspSmartUpload就也不行了
//可是要我自己去写IO的那些东西,又有些不情愿,于是就琢磨着到网上找找其它的文件上传组件
//很快就在oschina.net发现了COS组件,当时看到那个Demo,不禁眼前一亮,这组件太给力了
//于是决定好好研究研究它,随之就去CSDN搜索COS的相关文章,竟然少得可怜,让我大吃一惊
//反倒是commons-fileupload如日中天,莫非COS宣传不力??于是赶紧探索COS的前世今生
//没想到COS竟然是大名鼎鼎的O'Rrilly公司开发的一款用于HTTP上传文件的OpenSource组件
//太赞了!!大家都知道:O'Reilly公司的书是非常闻名的
//没想到O'Reilly竟然也开发了一个上传组件,还是开源的,也是为开源事业做出了贡献啊,赞!!
//于是在COS主页:http://www.servlets.com/cos将其发行包下载下来
//COS下载地址为:http://www.servlets.com/cos/cos-26Dec2008.zip
//发现COS的最后一次更新,是2008年12月26日
//好了,不扯了,言归正传
//网上所有我看到的COS使用的例子,都对maxPostSize参数存在一定的误解,说的都不够严密
//int maxPostSize = 5 * 4 * 1024 * 1024;
//网上部分人对这行代码的解释是:限定所上传文件的单个大小最大为4MB,且最多只能上传5个文件
//当时第一反应:这COS也忒棒了吧,这么注重细节,连这个都封装好了??
//紧接着又一想:貌似不对呀,为何不单独定义一个变量,来限定上传文件的个数呢?
//像这样都封装到maxPostSize中,貌似不太便于升级和维护啊,这样也未免太懒些了吧
//伴随着这个疑问,我也就开始步步测试,结果发现:此乃误解!!
//通过查看COS的源码,在MultipartRequest.java的第70行,发现是这样定义的
//private static final int DEFAULT_MAX_POST_SIZE = 1024 * 1024; // 1 Meg
//这说明了:COS组件的本意,是要用该参数来限定所上传文件的合计大小!!
//而且在COS主页中,已经对其进行了说明,请参见http://www.servlets.com/cos/faq.html
//在该页面中,有这样一段话:The default maximum is 1 Meg。。这不就是很好的说明嘛
//今天,我曾试图翻译http://www.servlets.com/cos/faq.html里的文档
//因为,这份FAQ写的并不是太难,结果翻译到了一半,发现:这么做,意义不大。于是停止了翻译
//好了,关于maxPostSize参数的说明,就到这里吧
//我想说的是:人,要对自己负责,最直接的体现,就是对自己写的代码负责
//我想说的是:在网上获得到的代码,自己一定要重新运行测试一遍
//我想说的是:毕竟,人家把代码写到了网上,说明此人不那么吝啬,这是值得肯定和赞许的
//我想说的是:但作为普通老百姓的咱们,人家没有义务对你负责,这你要知道
//我想说的是:同样,我博客的所有代码,虽已经过我的亲自测试,但未免会由于某些JDK环境等因素导致失效
//我想说的是:所以,如果哪位网友发现,我的某些代码不合时宜,还望不吝指出:jadyer@yeah.net
/***************************************************************************************************/
这是一个Servlet应用。。
首先是web.xml
[xhtml] view plaincopyprint?
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>UploadServelt</servlet-name>
<servlet-class>com.jadyer.servlet.UploadServelt</servlet-class>
<!-- 指定所上传的文件,在上传成功后,保存在硬盘中的位置 -->
<init-param>
<param-name>savePath</param-name>
<param-value>D://mydata//upload</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>UploadServelt</servlet-name>
<url-pattern>/servlet/UploadServelt</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>upload.jsp</welcome-file>
</welcome-file-list>
</web-app>
<!--
曾有网友拿COS跟commons-fileupload和jspSmartUpload进行试验对比,试验过程如下
分别上传2MB、20MB、45MB、200MB的文件,并测试三种组件的花费时间,测试结果如下
文件小于2MB时,COS和FileUpload的上传速度差不多,但jspSmartUpload已显出弱势
随着文件的增大,FileUpload和SmartUpload的上传速度明显不如COS
当文件200MB时,SmartUpload已经不堪重负而崩溃
而此时COS所花费的时间比FileUpload要少了20多秒
毫无疑问,试验结果,COS的性能,当之无愧位居第一
-->
然后是用于收集所上传的文件信息的upload.jsp页面
[xhtml] view plaincopyprint?
<%@ page language="java" pageEncoding="UTF-8"%>
<form action="<%=request.getContextPath()%>/servlet/UploadServelt" enctype="multipart/form-data" method="POST">
用户:<input type="text" name="username"><br/>
密码:<input type="password" name="password"><br/>
性别:<input type="radio" name="sex" value="woman" checked>女
<input type="radio" name="sex" value="man">男<br/>
喜好:<input type="checkbox" name="like" value="sleep">睡觉
<input type="checkbox" name="like" value="coding" checked>写代码
<input type="checkbox" name="like" value="eat">吃饭<br/>
附件:<input type="file" name="file11"><br/>
附件:<input type="file" name="file22"><br/>
附件:<input type="file" name="file33"><br/>
<input type="submit" value="我要上传">
</form>
接着是自定义的用于解决上传的文件名冲突的命名策略类
[java] view plaincopyprint?
package com.jadyer.util;
import java.io.File;
import java.util.Date;
import com.oreilly.servlet.multipart.FileRenamePolicy;
/**
* 自定义的命名策略文件
* @see 用于解决上传文件的同名冲突问题
* @see 解决方法:文件名 + 时间戳 + 文件后缀
*/
public class RandomFileNamePolicy implements FileRenamePolicy {
public File rename(File file) {
/*
* 假设,我们上传了一个同名文件,文件名为【abcd.ccc】
*/
int index = file.getName().lastIndexOf("."); //获取文件名中【.】的下标
String body = file.getName().substring(0, index); //表示文件名的主题,即【abcd】
String postfix = ""; //表示文件名的后缀,即【.ccc】
String timer = ""; //代表当前系统时间的数字
//如果该文件的名字中,没有【.】的话,那么lastIndexOf(".")将返回-1
if (index != -1) {
timer = new Date().getTime() + ""; //在文件的名字前面,添加的表示当前系统时间的数字
postfix = file.getName().substring(index); //获取到文件名当中的【.ccc】
} else {
timer = new Date().getTime() + "";
postfix = ""; //如果lastIndexOf(".")返回-1,说明该文件名中没有【.】即没有后缀
}
String newName = body + timer + postfix; //构造新的文件名
return new File(file.getParent(), newName); //返回重命名后的文件
}
}
最后是用来处理文件上传的核心操作的Servlet
[java] view plaincopyprint?
package com.jadyer.servlet;
import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jadyer.util.RandomFileNamePolicy;
import com.oreilly.servlet.MultipartRequest;
/**
* 此时需要在该Web项目中引入cos.jar
* 可通过http://www.servlets.com/cos/cos-26Dec2008.zip下载
*/
public class UploadServelt extends HttpServlet {
private static final long serialVersionUID = -7946856825034537432L;
private String savePath;
public void init(ServletConfig config) {
//取得web.xml中配置的savePath参数的值
savePath = config.getInitParameter("savePath");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//指定所上传的文件,上传成功后,在硬盘上的保存位置
String saveDirectory = this.savePath;
//如果所指定的文件夹,在硬盘上不存在的话,则创建该文件夹
File fileDirectory = new File(saveDirectory);
if(fileDirectory.exists()){
System.out.println("提示:" + saveDirectory + "目录已存在");
}else{
//fileDirectory.mkdir();//此时如果使用mkdir()方法,文件夹将创建失败
//因为我们在web.xml中指定的<init-param-value>的值,包含父目录
fileDirectory.mkdirs();
System.out.println("成功创建" + saveDirectory + "文件夹");
}
//限定所上传文件的合计大小,默认为1MB。这里设置的不是单个文件,而是上传的所有文件的总大小
int maxPostSize = 8 * 1024 * 1024;
//可能会出现不同用户,上传同名文件的现象,所以我们应该采取某种手段,以解决文件名称冲突的问题
//在COS中有一个默认的命名策略DefaultFileRenamePolicy,只要存在重名现象,它就会在文件名后面加上1.2.3..等以示区分
//DefaultFileRenamePolicy dfrp = new DefaultFileRenamePolicy();
//MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize, "UTF-8", dfrp);
//本人测试的结果却是:若未显式new DefaultFileRenamePolicy(),此时若上传同名文件,则先前的文件会被后面上传的文件覆盖掉
//MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize, "UTF-8");
//我们也可以自定义命名策略文件。。我这里的解决办法是:文件名 + 时间戳 + 文件后缀
//在COS中自定义命名策略文件时,只需要实现FileRenamePolicy接口,并重写其rename(File file)方法即可
RandomFileNamePolicy rfnp = new RandomFileNamePolicy();
//完成文件上传
MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize, "UTF-8", rfnp);
//输出所上传的文件的信息
Enumeration fileNames = multi.getFileNames();
while(fileNames.hasMoreElements()){
String fileName = (String)fileNames.nextElement();
if(null != multi.getFile(fileName)){
String lastFileName = multi.getFilesystemName(fileName);
System.out.println("上传的文件: " + saveDirectory + "//" + lastFileName);
}
}
//输出所提交的表单中其它文本输入域的值
Enumeration formValue = multi.getParameterNames();
while(formValue.hasMoreElements()){
String param = (String)formValue.nextElement();
String value = multi.getParameter(param);
System.out.println(value);
}
//若知道前台表单输入域的name值,便可使用下面代码,更省事
System.out.println("用户:" + multi.getParameter("username"));
System.out.println("密码:" + multi.getParameter("password"));
System.out.println("性别:" + multi.getParameter("sex"));
for(String like : multi.getParameterValues("like")){
System.out.println("喜好:" + like);
}
}
}
/*************【MultipartRequest类中的几个实用方法】**************************************************/
//public Enumeration getFileNames()
//返回包含了所有上传的文件名称的一个Enumeration对象
//在Enumeration对象里面储存的是前台表单中<input type="file" name="">里面的name值
//public File getFile(String name)
//返回存储在服务器上的指定name的File对象。该name是<input type="file" name="">的name值
//若服务器上不存在该文件或者未上传该文件到服务器上,则返回null
//public String getFilesystemName(String name)
//返回所上传的文件,在服务器上的真正文件名。该name是<input type="file" name="">的name值
//如果在上传文件时,未指定FileRenamePolicy命名策略文件,则返回的是该文件上传之前的原始名称
//若服务器上不存在该文件或者未上传该文件到服务器上,则返回null
//public String getOriginalFileName(String name)
//返回所上传的文件,在命名策略文件生效前的文件名。该name是<input type="file" name="">的name值
//说白了,就是你上传的文件的本地的原始名字,而不是在上传到服务器之后,为解决同名现象而被重命名后的名字
//public Enumeration getParameterNames()
//返回前台表单中,除文件输入域外的,其它文本输入域的所有参数值
//在Enumeration对象里面,储存的是前台表单中的<input type="除file外" name="">里面的name值
//public String getParameter(String name)
//返回前台表单中,文本输入域的值。该name是表单中<input type="除file外" name="">里的name值
//如果前台表单中的name参数,对应有多个值,比如<input type="checkbox">
//那么此时,该方法将只会输出这多个值中的最后一个值
//所以,对于类似<input type="checkbox">而言,更推荐getParameterValues(String name)方法
/***************************************************************************************************/
/*************【略析COS组件中MultipartRequest构造方法】***********************************************/
//com.oreilly.servlet.MultipartRequest.MultipartRequest主要负责文件上传的处理
//MultipartRequest类共有8个构造函数,可参考官方文档,以下是对构造函数中参数的简要说明
//saveDirectory--指定所上传文件,在服务器端的存储目录
//maxPostSize----限制上传文件的合计大小。默认为1MB
//encoding-------解决上传文件名称的乱码问题
//policy---------解决上传文件名称的重名问题
/***************************************************************************************************/
/*************【关于maxPostSize参数的感言】**********************************************************/
//这里必须声明一点:MultipartRequest构造方法中的maxPostSize参数,网上存在一定的误解
//接触COS,是很偶然的:周三,QQ上,突然想要写一段代码,实现的是在两个JSP中上传一个图片
//要求:代码尽量少。原本我对IO流就没那么熟练,于是条件反射的就想用commons-fileupload组件
//结果,还是觉得不行,要求代码要尽量少啊。我一寻思,既如此,jspSmartUpload就也不行了
//可是要我自己去写IO的那些东西,又有些不情愿,于是就琢磨着到网上找找其它的文件上传组件
//很快就在oschina.net发现了COS组件,当时看到那个Demo,不禁眼前一亮,这组件太给力了
//于是决定好好研究研究它,随之就去CSDN搜索COS的相关文章,竟然少得可怜,让我大吃一惊
//反倒是commons-fileupload如日中天,莫非COS宣传不力??于是赶紧探索COS的前世今生
//没想到COS竟然是大名鼎鼎的O'Rrilly公司开发的一款用于HTTP上传文件的OpenSource组件
//太赞了!!大家都知道:O'Reilly公司的书是非常闻名的
//没想到O'Reilly竟然也开发了一个上传组件,还是开源的,也是为开源事业做出了贡献啊,赞!!
//于是在COS主页:http://www.servlets.com/cos将其发行包下载下来
//COS下载地址为:http://www.servlets.com/cos/cos-26Dec2008.zip
//发现COS的最后一次更新,是2008年12月26日
//好了,不扯了,言归正传
//网上所有我看到的COS使用的例子,都对maxPostSize参数存在一定的误解,说的都不够严密
//int maxPostSize = 5 * 4 * 1024 * 1024;
//网上部分人对这行代码的解释是:限定所上传文件的单个大小最大为4MB,且最多只能上传5个文件
//当时第一反应:这COS也忒棒了吧,这么注重细节,连这个都封装好了??
//紧接着又一想:貌似不对呀,为何不单独定义一个变量,来限定上传文件的个数呢?
//像这样都封装到maxPostSize中,貌似不太便于升级和维护啊,这样也未免太懒些了吧
//伴随着这个疑问,我也就开始步步测试,结果发现:此乃误解!!
//通过查看COS的源码,在MultipartRequest.java的第70行,发现是这样定义的
//private static final int DEFAULT_MAX_POST_SIZE = 1024 * 1024; // 1 Meg
//这说明了:COS组件的本意,是要用该参数来限定所上传文件的合计大小!!
//而且在COS主页中,已经对其进行了说明,请参见http://www.servlets.com/cos/faq.html
//在该页面中,有这样一段话:The default maximum is 1 Meg。。这不就是很好的说明嘛
//今天,我曾试图翻译http://www.servlets.com/cos/faq.html里的文档
//因为,这份FAQ写的并不是太难,结果翻译到了一半,发现:这么做,意义不大。于是停止了翻译
//好了,关于maxPostSize参数的说明,就到这里吧
//我想说的是:人,要对自己负责,最直接的体现,就是对自己写的代码负责
//我想说的是:在网上获得到的代码,自己一定要重新运行测试一遍
//我想说的是:毕竟,人家把代码写到了网上,说明此人不那么吝啬,这是值得肯定和赞许的
//我想说的是:但作为普通老百姓的咱们,人家没有义务对你负责,这你要知道
//我想说的是:同样,我博客的所有代码,虽已经过我的亲自测试,但未免会由于某些JDK环境等因素导致失效
//我想说的是:所以,如果哪位网友发现,我的某些代码不合时宜,还望不吝指出:jadyer@yeah.net
/***************************************************************************************************/
发表评论
-
java编程思想final的理解
2015-03-06 13:38 382根据上下文环境,java的关键字final也存在着细微的区别, ... -
PDF2SWF中文字符集解决方案
2014-02-26 15:12 829转自:http://www.cnblogs.com/liver ... -
Runtime.getRuntime().exec() 输出流阻塞的解决方法
2014-02-26 09:40 1880转自:http://blog.csdn.net/xiaoani ... -
笔记(不用老搜索了)
2013-07-17 16:16 0下面代码则执行了subgo()函数, <a href ... -
利用LinkedBlockingQueue实现生产者-消费者模式
2013-06-05 16:09 718由于LinkedBlockingQueue 实现是线程安全的, ... -
加密123
2013-05-08 22:35 865/** * 加密传输时的密码 * @author weirhp ... -
jsoup解析
2013-04-28 15:31 715http://www.ibm.com/developerwor ... -
java线程管理利器:java.util.current的用法举例
2012-12-05 15:42 1010DK5中增加了Doug Lea的并发库,这一引进给java线程 ... -
Tomcat - 解决which must be escaped when used within the value错误
2012-11-19 15:17 657http://www.cnblogs.com/javadu/a ... -
Java POI Word 写文档
2012-11-09 09:19 8761 package apache.poi; 2 3 ... -
Java Annotation(1)
2011-06-19 09:48 666作者:曾巧(numenzq) 摘要 Annotation( ... -
关于request得到路径的几种方法
2011-06-08 15:43 944request.getRequestURI() /jque ... -
JAVA EXCEL API 简介
2011-04-18 16:32 722转自:http://www.ibm.com/dev ... -
Hibernate 多对多双向关联
2011-03-21 11:09 620Hibernate 多对多双向关联 一、模型介绍 多个 ... -
Hibernate 一对多连接表双向关联
2011-03-21 11:09 767Hibernate 一对多连接表双向关联 一、模型介绍 ... -
Hibernate 一对多外键双向关联
2011-03-21 11:08 817Hibernate 一对多外键双向关联 一、模型介绍 ... -
Hibernate 一对一主键双向关联
2011-03-21 11:07 757Hibernate 一对一主键双向关联 一对一主键映射在一 ... -
Hibernate 一对一外键双向关联
2011-03-21 11:07 648Hibernate 一对一外键双向关联 一对一外键关联是一 ... -
Hibernate 多对多单向关联
2011-03-21 11:06 642Hibernate 多对多单向关联 一、模型介绍 多个人( ... -
Hibernate 多对一连接表单向关联
2011-03-21 11:05 714Hibernate 多对一连接表单向关联 一、模型介绍 ...
相关推荐
使用fileupload组件实现文件上传功能 FileUpload组件是Apache提供的一款文件上传组件,能够帮助我们轻松实现文件上传功能。下面我们将详细介绍使用FileUpload组件实现文件上传功能的步骤和要点: 首先,需要引入两...
本文所提到的“Cos组件”并非特指腾讯云的COS服务,而是泛指一种用于实现文件上传下载功能的技术方案。在此基础上,我们将探讨具体的实现细节。 #### 三、文件上传的关键步骤 文件上传涉及到客户端(浏览器)和...
使用COS组件进行文件上传,首先要确保项目中已经正确引入了"Cos-26Dec2008.jar"。通常,这可以通过Maven或Gradle等依赖管理工具完成。如果选择手动添加,需要将该jar文件放入项目的类路径中,例如`lib`目录,并确保...
总之,Java Web应用中使用COS组件能够便捷地实现文件上传和管理功能,同时得益于云存储的特性,能够提供高可靠性和可扩展性。通过熟练掌握COS的使用,可以提升Web应用的用户体验和数据管理效率。
本文将重点介绍如何使用Cos组件来实现文件上传功能。 #### Cos组件简介 Cos(Common Object Services)组件是由O'Reilly公司开发的一个开源项目,专门用于处理文件上传操作。相比于其他商业组件或框架内置的功能,...
本文将深入探讨如何使用COS框架实现单文件上传,并进一步说明如何通过稍加修改实现多文件上传。 首先,让我们了解COS的基本概念。COS是一种分布式存储服务,它允许用户存储和检索任意数量的数据,无论数据大小。...
在描述中提到的“Cos组件上传及简单的应用实例”,意味着我们将探讨如何使用COS提供的SDK或组件来实现文件的上传操作,并了解如何在实际的企业级开发中应用这些功能。这通常涉及到以下几个关键步骤: 1. **SDK集成*...
Java中使用COS实现文件上传功能是通过使用O'Rrilly公司开发的OpenSource组件COS来实现的,该组件用于HTTP上传文件。下面将详细介绍使用COS实现文件上传功能的过程。 首先,需要下载COS的jar包,下载地址是...
标题中的“自制jquery+SWFUpload+COS 多文件上传组件”揭示了这个项目的核心:一个结合了jQuery、SWFUpload和腾讯云对象存储(COS)服务的多文件上传工具。这个组件允许用户在网页上批量上传文件,并将它们存储到...
Java文件上传组件COS,全称为Cloud Object Storage,是由腾讯云提供的一种云存储服务,它支持高可用、高并发的文件存储与访问。在Java开发中,COS提供了丰富的SDK和API,使得开发者能够轻松地将应用程序与云端存储...
jquery+SWFUpload+COS上传组件的使用 jquery+SWFUpload+COS上传组件的使用jquery+SWFUpload+COS上传组件的使用jquery+SWFUpload+COS上传组件的使用jquery+SWFUpload+COS上传组件的使用jquery+SWFUpload+COS上传组件...
基于java的开发源码-文件上传组件 COS.zip 基于java的开发源码-文件上传组件 COS.zip 基于java的开发源码-文件上传组件 COS.zip 基于java的开发源码-文件上传组件 COS.zip 基于java的开发源码-文件上传组件 COS.zip ...
cos组件上传及简单的应用实例,包括了企业级的开发,以及相应的包 和API 文件上传的改进: 增加了对于Servlet 2.4和Java 5的支持。 增加了一个ExceededSizeException类型的捕捉更容易。 增加了支持EBCDIC机。 增加...
首先,从提供的数据来看,Cos组件在上传大文件时表现出色,尤其在200M的文件上传测试中,相比于FileUpload和SmartUpload,其平均耗时显著减少,证明了它的高效性。在小文件上传方面,虽然Cos与FileUpload的差距不大...
总之,理解并熟练掌握这些组件的使用,能够帮助开发者构建高效、稳定的文件上传和下载功能,提升Web应用的用户体验。在实际开发过程中,开发者需要考虑安全性、性能以及可扩展性,合理地选择和组合这些工具,以达到...
本文档旨在详细介绍如何使用这个组合实现高效的文件上传功能。 **1. 组件介绍** jQuery是一个广泛使用的JavaScript库,它简化了DOM操作、事件处理和AJAX交互。SWFUpload是一个基于Flash的文件上传组件,它可以支持...
" 指的是腾讯云对象存储服务(Cloud Object Storage,简称COS)的Java SDK,它是一个关键的开发组件,主要用于Java开发者在应用程序中实现对腾讯云COS的文件上传、下载等操作。这个jar包包含了必要的类和方法,使得...
【标题】"Java源码:Java文件上传组件 COS.zip" 提供的是一个使用Java实现的文件上传组件,它专门针对腾讯云对象存储服务(COS,Cloud Object Storage)设计。这个组件使得开发者能够轻松地在Java应用中实现对COS的...
基于Java的COS文件上传组件是为了简化与COS服务交互而设计的库,它允许开发者通过简单的API调用来实现文件到云端的上传操作。 【描述】基于Java的文件上传组件COS.zip包含了一些关键组成部分,用于帮助开发者快速...
使用基于COS的Java文件上传组件,开发者可以享受到以下优势: 1. **高性能**:优化的上传策略可以减少网络延迟,提高上传速度。 2. **高可用性**:云存储服务通常具有高可用性和高扩展性,能应对大流量的上传需求。 ...