`
zhouxing
  • 浏览: 198802 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

cos + ajax 文件上传

阅读更多
声明: 上传核心代码采用cos  此版本属于自己改装。版权归天星网

        近两天项目需要改版上传组件,我仔细研究了一下各上传组件的源码。cos不论从速度还是文件大小方面保持着良好的特性。

         经过我改装后的cos可以限制上传文件类型,返回文件流报告(ajax使用),假设读者已经熟悉cos和ajax。可以返回上传文件名称,完成百分比,文件传输速度,需要总时间,剩余时间。
         以下是部分代码:
    
文件1
<%
   //创建此目录保存文件
   String saveDirectory = "testfile";
   //每个文件最大100m,最多3个文件,所以...
   int maxPostSize = 3 * 100 * 1024 * 1024;
   //命名规则
   FileRenamePolicy policy = new DateFileRenamePolicy();
   
   HttpFileUPload fileUpload = new HttpFileUPload();
   //编码
   fileUpload.setEncoding("UTF-8");
   fileUpload.setMaxPostSize(maxPostSize);
   fileUpload.setPolicy(policy);
   fileUpload.setSaveDirectory(saveDirectory);
   //允许上传文件类型
   fileUpload.setAllowFiles("jpg,gif,mp3,rmvb,wmv,ghs,reg");
   //输出反馈信息
   try{
    Enumeration files = fileUpload.parseRequest(request);
    while (files.hasMoreElements()) {
     String name = (String) files.nextElement();
     File file = fileUpload.getFile(name);
     if (file != null) {
      out.println("上传的文件:" + file.getAbsolutePath()+" ");
      out.println("<hr>");
     }
    }
   }catch(Exception e){
    out.println(e.toString()+"<br>");
    out.println("<input type='button' value='重新上传' onClick=\""+"location='index.jsp'\""+">");
   }finally{
    //清理session
    Thread.sleep(1000);
    fileUpload.dispose();
   }
  %>


文件2
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>文件上传</title>
 </head>
 <body>
  <form name="uploadForm" id="uploadForm" method="post" enctype="multipart/form-data" action="upload.jsp">
   <P>
    <INPUT name="file1" type="file">
   </P>
   <P align="left">
    <INPUT name="file2" type="file">
   </P>
   <p>
    <INPUT name="file3" type="file">
   </p>
   <p>
   </p>
   <p id="show">
   </p>
   <p align="left">
    <input type="button" name="Submit" id="upload" value="上传" onClick="go();">
   </p>
  </form>
 </body>
</html>
<script type="text/javascript">
function createXMLHttpRequest() {
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
        if (window.XMLHttpRequest) {
            xmlHttp = new XMLHttpRequest();
        } else {
        }
    }
}
function go() {
    document.uploadForm.submit();
    createXMLHttpRequest();
    var url = "ProgressBarServlet";
    var button = document.getElementById("upload");
    button.disabled = true;
    xmlHttp.open("GET", url, true);
    xmlHttp.onreadystatechange = goCallback;
    xmlHttp.send(null);
 
}
function goCallback() {
    if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
            setTimeout("pollServer()", 2000);
        }
    }
}
function pollServer() {
    createXMLHttpRequest();
    var url = "ProgressBarServlet";
    xmlHttp.open("GET", url, true);
    xmlHttp.onreadystatechange = pollCallback;
    xmlHttp.send(null);
}
function pollCallback() {
    if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
            var completePercent = xmlHttp.responseXML.getElementsByTagName("completePercent")[0].firstChild.data;
            //百分比
            var uploadSpeedKB = xmlHttp.responseXML.getElementsByTagName("uploadSpeedKB")[0].firstChild.data;
            //传输速度
            var remainTimeHMS = xmlHttp.responseXML.getElementsByTagName("remainTimeHMS")[0].firstChild.data;
            //剩余时间
            var totalTimeHMS = xmlHttp.responseXML.getElementsByTagName("totalTimeHMS")[0].firstChild.data;
            //总时间
            var fileName = xmlHttp.responseXML.getElementsByTagName("fileName")[0].firstChild.data;
            if (completePercent < 100) {
                document.getElementById("show").innerHTML =
                fileName + "\uff1b" + completePercent
                + "% <br>\u901f\u5ea6\uff1a" + uploadSpeedKB +"KB"
                + "\uff1b<br>\u5269\u4f59\u65f6\u95f4" + remainTimeHMS
                + "\uff1b<br>\u9700\u8981\uff1a" + totalTimeHMS; 
                setTimeout("pollServer()", 1000);
            } else {
                document.getElementById("show").innerHTML = "\u5b8c\u6210";
            }
        }
    }
}
</script>

      cos的优越性得意于他对IO流的重写。BufferedServletInputStream,LimitedServletInputStream,PartInputStream 经过几次对原始流的优化。详细信息请查看cos源码。


      周行制作   jwebee@163.com 
       工程文件下载
分享到:
评论
2 楼 weijavamen 2009-12-03  
谢谢楼主啦!LZ能共享你的类文件吗?我的邮箱:353033187@qq.com;谢谢了
1 楼 lonelydog 2009-03-18  
真是太好了,先下载下来再说。

相关推荐

    cos+ajax

    cos+ajax文件上传进度条

    cos-js-sdk-v5:腾讯云 COS JS SDK(XML API)

    cos-js-sdk-v5腾讯云 COS JS SDK()Get started一、前期准备首先,JS SDK 需要浏览器支持基本的 HTML5 特性,以便支持 ajax 上传文件和计算文件 md5 值。到 创建存储桶,得到 Bucket(存储桶名称) 和到 获取您的...

    SpringMVC上传图片文件到 腾讯云【2018年最新版】【JavaWeb】

    SpringMVC上传图片文件到 腾讯云,前端使用Ajax,亲测可用。

    cos-wx-sdk-v5:腾讯云 COS 小程序 SDK(XML API)

    把 demo/lib/cos-wx-sdk-v5.js 复制到自己小程序项目代码里,在需要上传文件的地方贴以下代码 var Bucket = 'test-1250000000'; var Region = 'ap-guangzhou'; // 初始化实例 var cos = new COS({

    JAVA上百实例源码以及开源项目

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    毕业设计-基于LSTM+CNN的自然语言处理,基于单维LSTM、多维LSTM时序预测算法和多元线性回归算法的预测模型源码+文档说

    数据库:Mysql5.7、COS 服务器:腾讯CVM(CentOS7.2) Web框架:Servlet、Ajax 前端技术:echarts、SVG、ecStat、jQuery、bootstrap - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都...

    JAVA上百实例源码以及开源项目源代码

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java开源包1

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包11

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包2

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包3

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包6

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包5

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包10

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包4

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包8

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包7

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包9

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包101

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

Global site tag (gtag.js) - Google Analytics