使用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

posted @ 2013-11-19 00:17  洽洽果  阅读(611)  评论(0)    收藏  举报