`
woshixushigang
  • 浏览: 578516 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

cos文件上传

 
阅读更多
 COS这个文件上传组件可以说在几个开源的上传文件组件中性能是非常优秀的,上传速度很快(相比fileUpload,smart等组件),但在使用Struts2结合COS文件上传时要注意Struts2实现了自己的MultiPartRequest,这个过滤后的request是不认COS的。

COS相比其它上传文件组件而言,除了具有速度优势外,其使用的便携性是非常好的,一两句简单地代码就搞定了COS对多文件的上传(指定下保存的地址、总文件上传大小限制、文件重命名策略[可选]、编码等),不像fileUpload,smart,Struts2等上传文件时那么麻烦。

工程结构图:

代码:

  1. /**
  2. * CosTest
  3. * 去上传文件页面
  4. */
  5. package com.labci.upload.file.servlet;
  6. import java.io.IOException;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import com.labci.upload.file.util.FileUtils;
  12. /**
  13. * @author Bill Tu(tujiyue/iwtxokhtd)
  14. * Jun 4, 2011[10:15:38 PM]
  15. *
  16. */
  17. public class ToUploadFileServlet extends HttpServlet {
  18. /**
  19. *
  20. */
  21. private static final long serialVersionUID = -5958936751236640280L;
  22. @SuppressWarnings("deprecation")
  23. @Override
  24. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
  25. throws ServletException, IOException {
  26. String savePath=getInitParameter("path");
  27. String fullPath=req.getRealPath(savePath);
  28. String allFileNames=FileUtils.getAllFileNames(fullPath);
  29. req.setAttribute("allFileNames", allFileNames);
  30. req.getRequestDispatcher(getInitParameter("page")).forward(req, resp);
  31. }
  32. }

  1. /**
  2. * CosTest
  3. * 使用COS实现文件上传的Servlet
  4. */
  5. package com.labci.upload.file.servlet;
  6. import java.io.File;
  7. import java.io.IOException;
  8. import java.util.Enumeration;
  9. import javax.servlet.ServletException;
  10. import javax.servlet.http.HttpServlet;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. import com.labci.upload.file.util.CustomFileRenamePolicy;
  14. import com.labci.upload.file.util.FileUtils;
  15. import com.oreilly.servlet.MultipartRequest;
  16. import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
  17. /**
  18. * @author Bill Tu(tujiyue/iwtxokhtd)
  19. * Jun 4, 2011[10:29:58 PM]
  20. *
  21. */
  22. public class UploadFileServlet extends HttpServlet {
  23. /**
  24. *
  25. */
  26. private static final long serialVersionUID = 2006618974553985487L;
  27. //默认值
  28. private static int FILE_MAX_SIZE=1024;
  29. private static String savePath="/upload";
  30. private static String targetPage="index.jsp";
  31. private static String encoding="gbk";
  32. @Override
  33. public void init() throws ServletException {
  34. FILE_MAX_SIZE=Integer.parseInt(getInitParameter("max"));
  35. savePath=getInitParameter("path");
  36. targetPage=getInitParameter("page");
  37. encoding=getInitParameter("encode");
  38. }
  39. @SuppressWarnings({ "deprecation", "unchecked" })
  40. @Override
  41. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
  42. throws ServletException, IOException {
  43. String fullPath=req.getRealPath(savePath);
  44. File dir=new File(fullPath);
  45. if(!dir.exists()){
  46. dir.mkdirs();
  47. }
  48. /**
  49. * 1.不使用文件命名策略的情况下,上传相同的文件会进行覆盖,只保留一份
  50. * 2.使用默认的文件命名策略的情况下,上传相同的文件会在文件名后加1.2.3等数字系列号
  51. * 3.可实现FileRenamePolicy接口使用自己的文件命名策略
  52. */
  53. // DefaultFileRenamePolicy defaultPolicy=new DefaultFileRenamePolicy();
  54. CustomFileRenamePolicy customPolicy=new CustomFileRenamePolicy();
  55. @SuppressWarnings("unused")
  56. MultipartRequest mpr=new MultipartRequest(req,fullPath,FILE_MAX_SIZE,encoding,customPolicy);
  57. Enumeration fileNames=mpr.getFileNames();//得到所有已上传的文件名
  58. while(fileNames.hasMoreElements()){
  59. String fileName=(String) fileNames.nextElement();
  60. System.out.println(mpr.getFilesystemName(fileName));//得到该文件的现上传后的文件名
  61. System.out.println(mpr.getOriginalFileName(fileName));//得到该文件上传前的文件名(即原始名)
  62. }
  63. String allFileNames=FileUtils.getAllFileNames(fullPath);
  64. req.setAttribute("allFileNames", allFileNames);
  65. req.getRequestDispatcher(targetPage).forward(req, resp);
  66. }
  67. @Override
  68. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
  69. throws ServletException, IOException {
  70. doGet(req,resp);
  71. }
  72. }

  1. /**
  2. * CosTest
  3. * 定义自己的文件重命名策略
  4. */
  5. package com.labci.upload.file.util;
  6. import java.io.File;
  7. import com.oreilly.servlet.multipart.FileRenamePolicy;
  8. /**
  9. * @author Bill Tu(tujiyue/iwtxokhtd)
  10. * Jun 4, 2011[10:58:09 PM]
  11. *
  12. */
  13. public class CustomFileRenamePolicy implements FileRenamePolicy {
  14. public File rename(File file) {
  15. //假如就按时间戳来命名吧
  16. long time=System.currentTimeMillis();
  17. int lastDotPos=file.getName().lastIndexOf(".");
  18. String bodyName=file.getName().substring(0,lastDotPos);
  19. if(lastDotPos != -1){
  20. //有后缀名
  21. return new File(file.getParent(),bodyName+time+file.getName().substring(lastDotPos));
  22. }else{
  23. return new File(file.getParent(),bodyName+time);
  24. }
  25. }
  26. }

  1. /**
  2. * CosTest
  3. * 上传文件所用到的工具类
  4. */
  5. package com.labci.upload.file.util;
  6. import java.io.File;
  7. /**
  8. * @author Bill Tu(tujiyue/iwtxokhtd)
  9. * Jun 4, 2011[4:15:11 PM]
  10. *
  11. */
  12. public class FileUtils {
  13. private FileUtils(){
  14. }
  15. /**
  16. * 得到所有的文件名
  17. * @param dirPath
  18. * @return
  19. */
  20. public static String getAllFileNames(String dirPath){
  21. StringBuilder fileNames=new StringBuilder("");
  22. File files=new File(dirPath);
  23. if(files.isDirectory()){
  24. File []allFiles=files.listFiles();
  25. if(null!=allFiles && allFiles.length>0){
  26. for(File f:allFiles){
  27. if(f.isFile()){
  28. fileNames.append(f.getName()).append(",");
  29. }
  30. }
  31. fileNames.deleteCharAt(fileNames.length()-1);
  32. }
  33. }
  34. return fileNames.toString();
  35. }
  36. }

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.4"
  3. xmlns="http://java.sun.com/xml/ns/j2ee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  6. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  7. <servlet>
  8. <servlet-name>toUploadFilePage</servlet-name>
  9. <servlet-class>com.labci.upload.file.servlet.ToUploadFileServlet</servlet-class>
  10. <init-param>
  11. <param-name>page</param-name>
  12. <param-value>uploadFile.jsp</param-value>
  13. </init-param>
  14. <init-param>
  15. <param-name>path</param-name>
  16. <param-value>/upload</param-value>
  17. </init-param>
  18. </servlet>
  19. <servlet-mapping>
  20. <servlet-name>toUploadFilePage</servlet-name>
  21. <url-pattern>/toUploadFilePage</url-pattern>
  22. </servlet-mapping>
  23. <servlet>
  24. <servlet-name>uploadFile</servlet-name>
  25. <servlet-class>com.labci.upload.file.servlet.UploadFileServlet</servlet-class>
  26. <init-param>
  27. <param-name>page</param-name>
  28. <param-value>uploadFile.jsp</param-value>
  29. </init-param>
  30. <init-param>
  31. <param-name>path</param-name>
  32. <param-value>/upload</param-value>
  33. </init-param>
  34. <init-param>
  35. <param-name>max</param-name>
  36. <param-value>104857600</param-value>
  37. </init-param>
  38. <init-param>
  39. <param-name>encode</param-name>
  40. <param-value>utf-8</param-value>
  41. </init-param>
  42. </servlet>
  43. <servlet-mapping>
  44. <servlet-name>uploadFile</servlet-name>
  45. <url-pattern>/uploadFile</url-pattern>
  46. </servlet-mapping>
  47. </web-app>

  1. <%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>使用COS上传文件示例</title>
  6. </head>
  7. <body>
  8. <a href="toUploadFilePage" mce_href="toUploadFilePage">使用COS上传文件</a>
  9. </body>
  10. </html>

  1. <%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5. <head>
  6. <title>上传文件</title>
  7. </head>
  8. <body>
  9. <table>
  10. <tr>
  11. <td>
  12. <c:choose>
  13. <c:when test="${empty allFileNames}">
  14. <font color="blue">暂无上传的文件,请上传!</font>
  15. </c:when>
  16. <c:otherwise>
  17. <font color="red"><b>${allFileNames}</b></font>
  18. </c:otherwise>
  19. </c:choose>
  20. </td>
  21. </tr>
  22. <%--COS组件支持同时上传多个文件,不需要在上传代码中取文件名、大小等--%>
  23. <tr>
  24. <td>
  25. <form action="uploadFile" method="post" enctype="multipart/form-data">
  26. <p>
  27. <input type="file" name="file1"/>
  28. </p>
  29. <p>
  30. <input type="file" name="file2"/>
  31. </p>
  32. <p>
  33. <input type="submit" value="上传"/>
  34. </p>
  35. </form>
  36. </td>
  37. </tr>
  38. </table>
  39. </body>
  40. </html>

示例效果图:

1.首页面:

2.未使用任何重命名策略情况下上传相同文件时的情况:

分享到:
评论

相关推荐

    COS 文件上传;

    下面我们将详细探讨COS文件上传的相关知识点。 一、COS基本概念 1. 存储桶(Bucket):COS中的基本存储单元,可以理解为一个大的容器,用于存放对象(Objects)。每个存储桶都有全局唯一的名称。 2. 对象(Object)...

    cos文件上传demo

    【标题】:“COS文件上传demo” 在云存储服务领域,腾讯云对象存储(Cloud Object Storage,简称COS)提供了一种高效、安全、稳定的数据存储解决方案。本示例主要介绍如何利用`cos.jar`这个腾讯云COS的Java SDK,...

    java中cos文件上传示例

    相较于传统的FileUpload组件,COS文件上传在性能和文件大小处理上具有显著优势。下面我们将深入探讨Java中如何使用COS进行文件上传,并了解其背后的原理和技术细节。 首先,我们需要引入COS的Java SDK。在`....

    JSP+Servlet+cos文件上传下载Jar包.rar

    "JSP+Servlet+cos文件上传下载Jar包.rar"是一个压缩包,它提供了实现这些功能所需的关键库。让我们详细了解一下这个包以及如何利用其中的资源。 1. **cos.jar**:这是China Online System(COS)的Java库,主要用于...

    腾迅云cos文件上传

    腾迅云COS文件 上传,支持图片裁剪压缩等,视频截取转码等操作,自动判断文件大小进行分片上传异步获取结果,文档参考https://blog.csdn.net/weixin_39179428/article/details/80923437

    COS多文件上传

    在本文中,我们将深入探讨如何使用腾讯云对象存储(Cloud Object Storage,简称COS)进行多文件上传。COS是腾讯云提供的一种高可用、高可靠、低成本的云存储服务,能够帮助用户存储和管理海量的数据。对于开发者来说...

    jsp使用cos文件上传实例

    在本文中,我们将深入探讨如何在JavaServer Pages(JSP)中利用腾讯云对象存储服务(COS)进行文件上传。JSP是一种基于Java的动态网页技术,而COS则是腾讯云提供的一种高可用、高稳定、低成本的云存储服务。通过将这...

    js纯前端实现腾讯cos文件上传功能的示例代码

    在前端开发中,文件上传是一项常见的任务,而腾讯云COS(Cloud Object Storage)提供了可靠的云存储服务。本文将详细讲解如何使用JavaScript SDK实现在纯前端实现腾讯COS的文件上传功能。 首先,为了实现文件上传,...

    COS框架实现上传稍加修改即可实现多文件上传

    本文将深入探讨如何使用COS框架实现单文件上传,并进一步说明如何通过稍加修改实现多文件上传。 首先,让我们了解COS的基本概念。COS是一种分布式存储服务,它允许用户存储和检索任意数量的数据,无论数据大小。...

    文件上传需要cos组件:cos-26Dec2008.jar

    在JFinal中处理文件上传时,可能会遇到需要特定组件的情况,比如标题中提到的"cos-26Dec2008.jar"。这个组件是腾讯云的对象存储服务(Cloud Object Storage,简称COS)的Java SDK,用于帮助开发者方便地与COS进行...

    cos重命名 jsp+cos上传文件

    本文将深入探讨如何使用Java JSP(JavaServer Pages)结合COS SDK进行文件上传并实现重命名的功能。 首先,我们需要了解COS的基本操作。COS允许开发者将文件存储到云端,并提供了多种API和SDK供用户选择,包括Java ...

    JAVA COS上传实例支持Struts2

    COS这个文件上传组件可以说在几个开源的上传文件组件中性能是非常优秀的,上传速度很快(相比fileUpload,smart等组件),但在使用Struts2结合COS文件上传时要注意Struts2实现了自己的MultiPartRequest,这个过滤后的...

    java实现cos上传与下载

    Java实现COS(Cloud Object Storage)上传与下载是云计算服务中的常见操作,主要涉及对象存储的概念、Java SDK的使用以及文件I/O操作。COS通常由云服务提供商提供,用于存储大量的非结构化数据,如图片、视频、文档...

    腾讯云cos 上传文件用到的jar包

    腾讯云对象存储服务(Cloud ...总的来说,这个压缩包中的jar包是实现腾讯云COS文件上传功能的关键,配合提供的教程,开发者可以快速地将腾讯云的存储服务集成到Java应用程序中,从而享受到云存储带来的便利和优势。

    Java中使用COS实现文件上传功能

    Java中使用COS实现文件上传功能 Java中使用COS实现文件上传功能是通过使用O'Rrilly公司开发的OpenSource组件COS来实现的,该组件用于HTTP上传文件。下面将详细介绍使用COS实现文件上传功能的过程。 首先,需要下载...

    Java文件上传组件 COS

    Java文件上传组件COS,全称为Cloud Object Storage,是由腾讯云提供的一种云存储服务,它支持高可用、高并发的文件存储与访问。在Java开发中,COS提供了丰富的SDK和API,使得开发者能够轻松地将应用程序与云端存储...

    利用COS Servlet上传文件

    总的来说,利用COS Servlet上传文件涉及到客户端的表单提交和服务器端的Servlet处理,需要对HTTP协议、文件上传、MultipartRequest以及可能的业务逻辑有深入理解。同时,确保在实现过程中充分考虑安全性,以提供健壮...

    JAVA通用文件上传服务,提供OBS、OSS、COS、Minio或单机磁盘IO存储

    1、集成市面上较热门的云厂商 2、采用链式调用模式,只需要简单的配置当前运行采用哪个厂商,即可灵活的传输文件...3、支持OSS、COS、OBS、Minio等,如果是单机应用直接配置成本地即可 4、适用于对文件依赖比较大的应用

    cos.jar文件下载,cos.jar下载。

    " 指的是腾讯云对象存储服务(Cloud Object Storage,简称COS)的Java SDK,它是一个关键的开发组件,主要用于Java开发者在应用程序中实现对腾讯云COS的文件上传、下载等操作。这个jar包包含了必要的类和方法,使得...

    自制jquery+SWFUpload+COS 多文件上传组件

    标题中的“自制jquery+SWFUpload+COS 多文件上传组件”揭示了这个项目的核心:一个结合了jQuery、SWFUpload和腾讯云对象存储(COS)服务的多文件上传工具。这个组件允许用户在网页上批量上传文件,并将它们存储到...

Global site tag (gtag.js) - Google Analytics