首页 > 代码库 > 使用cos.jar包实现文件上传功能
使用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="http://www.mamicode.com/">
<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 = "http://www.mamicode.com/上传">
</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=http://www.mamicode.com/‘upload/"+fileName+"‘ />");
}
System.out.println("共上传" + fileCount + "个文件!");
out.close();
}
}
本人从事软件项目开发20年,10年的Java工程师系列课程的教学工作,录制30多门精品视频课程,每门课程都包含有项目实战,上课PPT,及完整的源代码下载,有兴趣的朋友可以看看我的在线课堂,如果想更详细全面的学习jsp课程,可以看看我的JSP从入门到精通+在线视频教育平台的视频课程:http://edu.51cto.com/course/8010.html
使用cos.jar包实现文件上传功能