墨竹小院
代码改变世界

COS 文件上传 <转载>

2011-07-12 12:30  MzXy  阅读(590)  评论(0)    收藏  举报

COS 文件上传 

Cos组件是O`Rrilly公司开发的一款免费组件。在项目实施中,本人也确实能感觉COS组件在上传速度有着明显的优势,所以有必要来学习一下COS的相关用法。

 COS的帮助文档如下图所示。

Cos组件中,MultipartRequest类主要负责文件上传的处理。MultipartRequest8个构造函数:

 

1.Public MultipartRequest ( HttpServletRequest request, String saveDirectory,) throws IOException



2.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize) throws IOException



3.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, FileRenamePolicy policy) throws IOException



4.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding) throws IOException



5.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding, FileRenamePolicy policy) throws IOException



6.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, String encoding) throws IOException



7.Public MultipartRequest ( HttpServletRequest request, String saveDirectory) throws IOException



8.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize) throws IOException

 

6种构造函数都是用来专门处理HTTP协议的,saveDirectory是上传文件要存储在服务器端的目录名称;maxPostSize是用来限制用户上传文件大小的,若超过maxPostSzie,会产生IOException,默认上传文件大小是1MBencoding可以设定用何种编码方式来上传文件名称,可以解决中文问题。

MultipartRequest类工具有8种方法,利用这些方法,我们可以取得请求的相关信息:

 

Public Enumeration getParameterNames() //可以取得请求参数的名称

public String getParameter(String name)  //此方法传回参数为name的值

public String[] getParameterValues(String name) //此方法主要用在取得当一指定参数具有多个值时,它会传回String的数组

public Enumeration getFileName() //传回所有文件输入类型的名称

public String getFilesystemNames(String name) //用此方法得到上传文件的真正的文件名,这里的name指文件输入类型的名称

public String getContentType(String name) //此方法得到上传文件的内容类型

public File getFile(String name) //此方法得到一个文件对象,代表储存在服务器上的name文件

public String getOriginalFileName(String name) //返回文件在修改政策有效之前的文件名

COS组件的应用:

 

下面,我们通过一个上传文件的小程序来演示用COS组件上传文件的应用;

一;建一个名为upFile的工程:在WeRoot目录下创建两个页面,分别为upFile.html(上传页面)Uplad.jsp(处理结果页面)

二;导入 Cos.jar  Cos.jar包导入lib目录下。

 

<html>

<head>

<title>文件上传首页</title>

</head>

<body bgcolor="#aaccbb">

文件上传:

<hr/>

<form action="upland.jsp" method="post" enctype="multipart/form-data">

<input type="file" name="file1"><br/>

<input type="file" name="file2"/><br/>

<input type="file" name="file3"/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

<input type="submit" value="上传"/>

</form>

</body>

</html>

三;编写页面和业务代码;

1,上传页面的upFile.html程序清单; 

上传后页面Upland.jsp代码清单;

<%@ page import="java.util.*" contentType="text/html; charset=gbk" %>

<%@ page import="java.io.*"%>

<%@page import="com.oreilly.servlet.multipart.*"%>

<%@page import="com.oreilly.servlet.*" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head >

<title>上传文件</title>

<%

//黄河之水哪里去,文件保存在何处?注意:这个文件夹一定要先创建,否则会抛出、、//IllegalArgumentException异常

String fileDirectory = "c://haha";

//设置文件的最大值为500M,在这里有三个文件,上传时是按字节计算的,所以上传的文件最大值为;

int fixMax = 3 * 500 * 1024 * 1024 ;

//设置response 的编码为gbk; ,同时采用缺省的文件名冲突解决策略,实现上传

MultipartRequest multi
= newMultipartRequest(request,fileDirectory,fixMax,"gbk");

//到这里上传文件完成,为了显示上传后的结果,我们用Enumeration返回上传的信息

//输出反馈信息;

Enumeration enums
= multi.getFileNames();

while(enums.hasMoreElements()){

System.out.println(
"hahah");

String fileName = (String)enums.nextElement();

File file
= multi.getFile(fileName);

if(file!=null){

String name = multi.getFilesystemName(fileName);

String lastName = fileDirectory +"//"+ name;

out.print(
"文件已成功上传到:"+lastName+"<hr>");

}

}

%>

</head>

<body bgcolor="#aaccbb">

<h3>my file up success !</h3>

</body>

</html>