`

使用COS组件进行文件上传

阅读更多
大文件的上传速度很关键....
一般在struts中都是使用自带的上传组件...

COS相对于别的上传组件,如fileupload,smartupload,有多优秀http://tmsoft.lsxy.com/index.php?load=read&id=401

COS与stuts结合使用有些问题:http://www.iteye.com/topic/137478

COS的一般知识http://tmsoft.lsxy.com/index.php?load=read&id=404

直接在JSP中制作...
<%@ page contentType="text/html; charset=GBK"%>   
<html>   
    <body>   
        <form name="form1" method="post" enctype="multipart/form-data"  
            action="upload.jsp">   
            <input name="file1" type="file"><br>   
            <input name="file2" type="file"><br>   
            <input name="file3" type="file"><br>   
            <input type="submit" name="Submit"  value="上传">   
        </form>   
    </body>   
</html>  


<%@ page contentType="text/html; charset=gb2312" %>   
<%@ page import="java.util.Enumeration"%>   
<%@ page import="com.oreilly.servlet.MultipartRequest" %>   
<%@ page import="java.io.File" %>   
<html>   
  <head>   
  </head>   
  <body>   
    <%   
    String saveDirectory = "c:\\upload";   
    //每个文件最大5m,最多3个文件       
    int maxPostSize = 3 * 5 * 1024 * 1024;   
    //response的编码为"gb2312",同时采用缺省的文件名冲突解决策略,实现上传      
    MultipartRequest multi = new MultipartRequest(request,saveDirectory,    
        maxPostSize, "gb2312");   
    //输出反馈信息      
    Enumeration file = multi.getFileNames();   
    while (file.hasMoreElements()) {   
        String name = (String) file.nextElement();   
        File f = multi.getFile(name);   
        if (f != null) {   
            String fileName = multi.getFilesystemName(name);   
            String lastFileName = saveDirectory + "\\" + fileName;   
            out.println("文件已经上传到:" + lastFileName);   
            out.println("<br>");   
            }   
        }   
    %>   
  </body>   
</html>  



考虑到自己的项目需要,我使用了自己的命名策略,只要实现了FileRenamePolicy接口中的rename(File file)方法即可,实现非常方便,COS有个默认的命名策略DefaultFileRenamePolicy,只要存在重名,就会在文件名后面加上1.2.3....等数字,不想麻烦的就可以直接以下代码:
RandomFileRenamePolicy rfrp=new RandomFileRenamePolicy();
MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"gb2312",rfrp);
    //替换成:

    MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"gb2312);

最后附上我自己的命名策略文件(其实就是简单地用时间戳命名而已)。
import java.io.File;
import java.util.Date;

import com.oreilly.servlet.multipart.FileRenamePolicy;


public class RandomFileRenamePolicy implements
        FileRenamePolicy ...{

    public File rename(File file) ...{
        // TODO Auto-generated method stub
        String body="";
        String ext="";
        int pot=file.getName().lastIndexOf(".");
        if(pot!=-1)...{
            body=(new Date()).getTime()+"";
            ext=file.getName().substring(pot);
        }else...{
            body=(new Date()).getTime()+"";
            ext="";
        }
        String newName=body+ext;
        file=new File(file.getParent(),newName);
        return file;
    }

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics