使用cos.jar 上传文件
java中文件上传中性能还可以的控件.直接上代码。
1,页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
This is my JSP page. <br>
<form action="<c:url value='/CosServlet'/>" enctype="multipart/form-data" method="post">
<input type="file" name="file" /><br>
<input type="submit" value="submit"><br>
</form>
</body>
</html>
2,servelet
package cn.itcast;
import java.io.File;
import java.io.IOException;
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 CosServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setCharacterEncoding("UTF-8");
String path = getServletContext().getRealPath("/file");
System.err.println(path);
// 创建文件目录。
File file = new File(path);
if (!file.exists() && !file.isDirectory()) {
file.mkdirs();
}
// 通过Cos实现文件上传
// 1,定义文件重命名的处理
Rename rename = new Rename();// 用到了策略模式;
// DefaultFileRenamePolicy dfr = new DefaultFileRenamePolicy();//
// 默认的策略。在上传的相同文件名后面加数字。
// 2,Cos中上传文件的核心类,是对原始的request的重写,默认是上传1M大小的文件,默认的普通域中的编码是ISO
MultipartRequest request = new MultipartRequest(req, path,
1024 * 1024 * 200, "UTF-8", rename);
// 获取文件上传后的名字,带1,2,3,
String fName = request.getFilesystemName("file");// 这里的file
// 是name的值
System.err.println("fname>>>" + fName);
// 获取上传前得文件名字。
String ofname = request.getOriginalFileName("file");
System.err.println("ofname>>>" + ofname);
// 得到文件的类型。
String type = request.getContentType("file");
System.err.println("type>>>" + type);
}
}
3,工具类
package cn.itcast;
import java.io.File;
import java.util.UUID;
import com.oreilly.servlet.multipart.FileRenamePolicy;
/**
*
* cos中对文件重新命名的类。
*
*/
public class Rename implements FileRenamePolicy {
public File rename(File file) {
// 获取原来的名字。
String name = file.getName();
String ext = name.substring(name.lastIndexOf("."));// 获取的后缀名。
// 获取UUID将36位的UUID换成32位的。MD5加密是32位的。
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
String newName = uuid + ext;
System.err.println("新的名字是:" + newName);
// 怎么更改名字呢:要获取文件的路径,但是不能写成:d://... 在linux上,是没有盘符的。
file = new File(file.getParent(), newName);
return file;
}
}
以上的代码需要导入cos.jar 和jstl.jar

浙公网安备 33010602011771号