使用cos.jar包实现文件上传功能

我们经常做项目时要用到文件上传功能,同时还要控制文件大小与文件类型,文件的重命名等功能;今天跟大家讲解一下使用cos.jar包来实现文件上传与控制的功能吧。

第一步:要把cos.jar文件拷贝到WEB-INF/lib文件夹

第二步:创建上传的jsp文件,upload.jsp,页面的表单必须有如下2个属性,并且值是固定的

1.enctype="multipart/form-data"
2.method = "post"

页面完整代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>上传文件</title>
    <script type="text/javascript">
     function check(){
     var filename = form1.File1.value;
     if(filename==""){
     alert("请选择要上传的文件");
     return false;
     }
     //获取点号(.)所在的位置下标;
     var pos = filename.indexOf(‘.‘)+1;
if(pos>0){
//获取扩展名
filename = filename.substring(pos,filename.length);
if(filename !=‘jpg‘ && filename !=‘JPG‘ && filename !=‘jpeg‘ && filename !=‘JPEG‘  && filename !=‘gif‘ && filename !=‘GIF‘ && filename !=‘png‘ && filename !=‘PNG‘&& filename !=‘png‘ && filename !=‘avi‘){
alert("只支持上传jpg,png,gif图片");
return false;
}
}
filename = form1.File2.value;
     pos = filename.indexOf(‘.‘)+1;
if(pos>0){
//获取扩展名
filename = filename.substring(pos,filename.length);
if(filename !=‘jpg‘ && filename !=‘JPG‘ && filename !=‘jpeg‘ && filename !=‘JPEG‘  && filename !=‘gif‘ && filename !=‘GIF‘ && filename !=‘png‘ && filename !=‘PNG‘&& filename !=‘png‘ && filename !=‘avi‘){
alert("只支持上传jpg,png,gif图片");
return false;
}
}
return true;
     }
    </script>
  </head>
  
  <body>
  <c:if test="${msg !=null}">
   <h2 align="center"><font color="red">${msg }</font></h2>
   <hr/>
  </c:if>
   <form name="form1" enctype="multipart/form-data" method = "post" action = "uploadServlet" onsubmit="return check();">  
      <input type="text" name="userName" />   
      <p>上传文件1:<input type = "file" name = "File1" size = "20" maxlength = "20"><br></p>  
      <p>上传文件2:<input type = "file" name = "File2" size = "20" maxlength = "20"><br></p>  
      <input type = "submit" value = "上传">  
    </form>  
  </body>
</html>

第三步:FileRenameUtil改类主要功能是对文件进行重命名,该类必须实现FileRenamePolicy接口,代码如下

package upload;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import com.oreilly.servlet.multipart.FileRenamePolicy;

public class FileRenameUtil implements FileRenamePolicy {  
  
    public File rename(File file) {  
        String body = "";  
        String ext = "";  
        Date date = new Date();  
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
       
        //14842908.55999.jpg
        int pot = file.getName().lastIndexOf(".");//取得文件名和后缀分割点  
        if (pot != -1) {//说明后缀存在  
//            body = date.getTime() + "";//采用时间的形式命名  
            body = sdf.format(date);
            ext = file.getName().substring(pot);//截取后缀名  
        } else {  
            body = (new Date()).getTime() + "";  
            ext = "";  
        }  
        Random rand = new Random();
        int rnd = Math.abs(rand.nextInt(9000))+1000;
        String newName = body +rnd + ext;  
        file = new File(file.getParent(), newName);//对文件进行重命名  
        return file;  
  
    }  
  
}

第四步:创建文件上传的servlet,实现文件上传

package upload;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.oreilly.servlet.MultipartRequest;

public class UploadServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
        // 保存文件的路径,必须是tomcat里面当前项目下的子路径 
        String filePath = getServletContext().getRealPath("/") + "upload";  
        System.out.println(filePath);//输出存放上传文件所到的路径  
        File uploadPath = new File(filePath);  
        // 检查文件夹是否存在 不存在 创建一个  
        if (!uploadPath.exists()) {  
         //创建文件夹
            uploadPath.mkdir();  
        }  
        // 文件最大容量 3M  
        int fileMaxSize = 3 * 1024 * 1024;  
        // 存放文件描述  
        @SuppressWarnings("unused")  
        String[] fileDiscription = { null, null };  
        // 文件名  
        String fileName = null;  
        // 上传文件数  
        int fileCount = 0;  
        // 重命名策略  
        FileRenameUtil rfrp = new FileRenameUtil();  
        // 上传文件  
        MultipartRequest mulit =null;
        try{
         mulit = new MultipartRequest(request, filePath,  
                fileMaxSize, "UTF-8", rfrp);//取得上传文件  
        }catch(Exception e){
         request.setAttribute("msg", "上传文件的大小不能超过3M");
         getServletContext().getRequestDispatcher("/T13/upload.jsp").forward(request, response);
         return;
        }
        //获取普通控件的值,不能使用request对象
        String userName = mulit.getParameter("userName");  
        System.out.println(userName);  
        PrintWriter out = response.getWriter();
        response.setContentType("text/html;charset=utf-8");
        
        Enumeration filesname = mulit.getFileNames();//取得上传的所有文件(相当于标识)   
        while (filesname.hasMoreElements()) {  
         //控件名称
            String name = (String) filesname.nextElement();//标识  
            System.out.println(name);  
            fileName = mulit.getFilesystemName(name); //取得文件名  
            String contentType = mulit.getContentType(name);//工具标识取得的文件类型  
            if (fileName != null) {  
                fileCount++;  
            }  
            System.out.println("文件名:" + fileName);  
            System.out.println("文件类型: " + contentType);   
            //在页面显示上传成功的图片
            out.println("<img src=‘upload/"+fileName+"‘ />");
        }  
        System.out.println("共上传" + fileCount + "个文件!");   
        out.close();
        
}
}

本人从事软件项目开发20年,10年的Java工程师系列课程的教学工作,录制30多门精品视频课程,每门课程都包含有项目实战,上课PPT,及完整的源代码下载,有兴趣的朋友可以看看我的在线课堂,如果想更详细全面的学习jsp课程,可以看看我的JSP从入门到精通+在线视频教育平台的视频课程:http://edu.51cto.com/course/8010.html

时间: 2024-08-05 14:46:42

使用cos.jar包实现文件上传功能的相关文章

不借助第三方jar包实现文件上传

如果实现文件上传难道非要借助第三方jar包(最常用的莫过于apache的commons-fileupload工具包)来实现吗?答案是否定的,下面通过例子演示在不借助第三方jar包的前提下如何实现文件的上传: 一.第一种实现方式 正在总结稍等!!! 二.第二种实现方式 正在总结稍等!!! 不借助第三方jar包实现文件上传,布布扣,bubuko.com

使用Commons FileUpLoad组件实现文件上传功能

Commons 是Apache开放的源码组织的一个java子项目,该项目主要涉及一些开发中常用的模块,如文件上传,命令行处理,数据库连接池等.FileUpLoad就是其中的一个用于处理HTTP文件上传的子项目.Commons FileUpLoad组建具有以下几个特点: 1.使用简单:Commons FileUpLoad组件可以方便的嵌入JSP文件中,在JSP文件中仅编写少量代码就可完成文件上传功能,十分方便. 2.能够全程控制上传的内容:使用Commons FileUpLoad组件提供的对象及操

Spring MVC使用commons fileupload实现文件上传功能

通过Maven建立Spring MVC项目,引入了Spring相关jar依赖. 1.为了使用commons fileupload组件,需要在pom.xml中添加依赖: <properties> <spring.version>3.0.7.RELEASE </spring.version> <junit.version>3.8.1</junit.version> <fileupload.version>1.2.2</fileupl

nodejs 实现简单的文件上传功能

首先需要大家看一下目录结构,然后开始一点开始我们的小demo. 文件上传总计分为三种方式: 1.通过flash,activeX等第三方插件实现文件上传功能. 2.通过html的form标签实现文件上传功能,优点:浏览器兼容好. 3.通过xhr level2的异步请求,可以百度formData对象. 这里使用2做个练习. node插件请看下package.json文件 { "name": "upload", "version": "0.1

配置php.ini实现PHP文件上传功能

本文介绍了如何配置php.ini实现PHP文件上传功能.其中涉及到php.ini配置文件中的upload_tmp_dir.upload_max_filesize.post_max_size等选项,这些选项是文件上传成败的关键.我们以php.5.3.5的Windows版本为例说明. php.ini中文件上传功能配置选项说明 用文本工具(推荐EditPlus)打开php.ini 配置文件,查找 File Uploads ,在这个区域有以下3个选项: file_uploads = On 是否允许HTT

如何在Web页面中集成文件上传功能

当前,个人主页制作非常流行.当用户开发好自己的页面时,需要将文件传输到服务器上,解决这个问题的方法之一 是运行FTP服务器并将每个用户的FTP默认目录设为用户的Web主目录,这样用户就能运行FTP客户程序并上传文件到指定的 Web目录.由于Windows NT 和 Windows98均不提供直接的基于窗口形式的FTP客户程序,用户必须懂得如何使用基于命令行 的FTP客户,或掌握一种新的基于窗口形式的FTP客户程序.因此,这种解决方案仅对熟悉FTP且富有经验的用户来说是可行 的. 如果我们能把文件

一个简单的blog系统(三) 增加文件上传功能

1. 一个完整的博客怎么能缺少图片呢,目前上传文件的方法有三种: (1)使用Express自带的文件上传功能,不涉及数据库. (2)使用Formidable外部模块,不涉及数据库. (3)上传到MongoDB,涉及到数据库. 可以看出,第一种方式最简单,Express通过bodyParser()解析请求体,因此我们可以使用bodyParser()来实现文件的上传功能. 2.实现过程 2.1 首先打开header.ejs,在<li><a href="/post" tit

用c++开发基于tcp协议的文件上传功能

用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学阅读,比 APUE 讲的更深入 这是某个银行广告项目(p2p传输视频)的一部分 IO模型采用的阻塞模式,文件一打开就直接上传 用vc 2003编译,生成win32 dll 麻雀虽小五脏俱全,CSimpleSocket,CReadStream dll 输出一虚类 extern "C" __d

Node.js入门教程——如何实现文件上传功能

作者:zhanhailiang 日期:2014-11-16 本文将介绍如何使用Node.js实现文件上传功能. 1. 初始化项目信息:npm init [root@~/wade/nodejs/nodejs-upload-image-demo]# npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to gu