|
<%@page import="java.io.*,java.util.*,com.hing.upload.*"%> <%@page import="com.oreilly.servlet.MultipartRequest"%> <%@page contentType="text/html; charset=gb2312" %> <% //文件上传后,保存在c:upload
String saveDirectory ="c:upload"; //每个文件最大5m,最多3个文件,所以...
int maxPostSize =3 * 100 * 1024 * 1024; //response的编码为"gb2312",同时采用相应的命名策略(我用了自己的实现方法)冲突解决策略,实现上传
RandomFileRenamePolicy rfrp=new RandomFileRenamePolicy(); MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"gb2312",rfrp); //输出反馈信息
Enumeration files = multi.getFileNames(); while (files.hasMoreElements()) { String name = (String)files.nextElement(); File f = multi.getFile(name); if(f!=null){ String fileName = multi.getFilesystemName(name); String lastFileName= saveDirectory+"" + fileName; out.println("sucess:"+lastFileName); out.println("<br>"); } } %>
|
考虑到自己的项目需要,我使用了自己的命名策略,只要实现了FileRenamePolicy接口中的rename(File file)方法即可,实现非常方便,COS有个默认的命名策略DefaultFileRenamePolicy,只要存在重名,就会在文件名后面加上1.2.3....等数字,不想麻烦的就可以直接以下代码:
|
RandomFileRenamePolicy rfrp=new RandomFileRenamePolicy(); MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"gb2312",rfrp);
替换成:
MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"gb2312");
|
最后附上我自己的命名策略文件(其实就是简单地用时间戳命名而已)。
|
package com.tian.upload;
import java.io.File; import java.util.Date;
import com.oreilly.servlet.multipart.FileRenamePolicy;
public class RandomFileRenamePolicy implements FileRenamePolicy {
public File rename(File file) { // TODO Auto-generated method stub
String body=""; String ext=""; int pot=file.getName().lastIndexOf("."); if(pot!=-1){ body=(new Date()).getTime()+""; ext=file.getName().substring(pot); }else{ body=(new Date()).getTime()+""; ext=""; } String newName=body+ext; file=new File(file.getParent(),newName); return file; }
}
|
摘自 周建东的《优秀的上传组件--COS》一文
http://tmsoft.lsxy.com/index.php?job=tags&seekname=%E4%B8%8A%E4%BC%A0
|
|