用cos组件上传文件

上传文件是web项目的基本功能,一般来说,客户没有特别的要求,但有时候也会遇到问题。我原来的项目中用的是jspsmart上传组件,上传小文件没有问题,上传大文件就特别慢,速度只有10-40k/s,客户要求我们提高上传速度。
    经过在网上查询,发现有人推荐cos上传组件。我做了一个测试页面。
    在网上下载cos组件后,解压,将lib目录下的cos.jar加入项目lib中。
    做个上传的页面upload.html。
    代码很简单。如下:
<html>
  <head>
    <title>文件上传测试</title>  
  </head> 
  <body>
<form method="post" action="cos.jsp"  enctype="multipart/form-data" >
    公司文件上传测试<br/>
    请选择文件:<input type="file" name="file"  id="file"  size="80" />
    <input type="submit" value="上传" />
</form>
  </body>
</html>

后台cos.jsp页面:
<%@page contentType="text/html;charset=GBK"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@page import="javax.servlet.ServletContext"%>
<%@page import="com.oreilly.servlet.multipart.FileRenamePolicy"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.io.*"%>
<%@page import="java.util.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>  
    <title>文件上传测试</title>
  </head> 
  <body>
  
<%
String saveDir = "d:/javaupload/";
int maxPostSize = 300*1024*1024;//最大上传300MB
String encoding = "GBK";
long start;
long end;
long result;
float fileSize;
float perSendSize;

start=System.currentTimeMillis();
MultipartRequest multi = null;
try{
    multi = new MultipartRequest(request ,
            saveDir , maxPostSize , encoding);
}catch(IOException e){
    //上传大小超过maxPostSize就会出现IOException
     out.println("请确认上传文件不超过300M!");
    //out.println(e.getMessage());
    return;
}

//获取文件信息
Enumeration fileNames = multi.getFileNames();
while(fileNames.hasMoreElements()){
    //指表单中的name值
    String name = (String)fileNames.nextElement();
    String original = multi.getOriginalFileName(name);
    if(original == null)continue;
    String sysname = multi.getFilesystemName(name);
   //String type = multi.getContentType(name);
    end = System.currentTimeMillis();
result = (end-start)/1000;
File file = multi.getFile(name);
    //File file = new File(saveDir + sysname);
   long length = file.length();
fileSize = (float)length/1024/1024;
if(result==0)result=1;
perSendSize = fileSize/result;

    out.println("<font color='blue'>谢谢您参与测试!测试数据已记录</font><br />" );
    //request.getHeader( "user-agent ")
   
   // out.println(request.getHeader("user-agent"));
    out.println("您的IP地址是 :<font color='red'>" + request.getRemoteAddr() +"</font><br />");
    out.println("您上传的原文件名称:<font color='red'>" + original +"</font><br />");
    out.println("上传到服务器上的文件全名称:<font color='red'>" + saveDir + sysname +"</font><br />");
    out.println("上传到服务器上的文件大小<font color='red'>:" + String.valueOf(fileSize) +"M</font><br />");
    out.println("上传用时:<font color='red'>" + String.valueOf(result) +"秒</font><br />");
    out.println("平均上传速度:<font color='red'>" + String.valueOf(perSendSize) +"M/秒</font><br />");
   // out.println("文件类型:" + type +"<br /><br />");
    SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    SimpleDateFormat format2=new SimpleDateFormat("yyyy-MM-dd");
    String logFile = "d:/javaupload/log/" +format2.format(new Date())+"_log.txt";
    FileWriter writer = new FileWriter(logFile, true);
    writer.write("\r\n===========================================================================\r\n");
    writer.write(format.format(new Date())+"\r\n");
    writer.write("您的IP地址是 : " + request.getRemoteAddr());
    writer.write("\r\n您上传的原文件名称: " + original );
    writer.write("\r\n上传到服务器上的文件全名称:" + saveDir + sysname);
    writer.write("\r\n上传到服务器上的文件大小:" + String.valueOf(fileSize) +"M");
   writer.write("\r\n上传用时:" + String.valueOf(result) +"秒");
   writer.write("\r\n平均上传速度:" + String.valueOf(perSendSize) +"M/秒");
   writer.write("\r\n===========================================================================\r\n");  
    writer.close();
    writer=null;  
    }
    %>
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
   <input name="submit2" type="button" value="返回" onClick="window.location='upload.html'">
  </body>
</html>

后台代码主要是上传文件,记录上传文件信息,速度到日志文件,方便查看测试结果。
部署在客户服务器上后,测试的结果客户非常满意。最慢的机子速度能达到500k/s,一般的机子都能达到1m/s以上,最给力的是谷歌浏览器和火狐浏览器,能达到10m/s。表现最次的是360浏览器,30k/s,真滥。

你可能感兴趣的:(html,jsp,servlet,浏览器,360)