用cos上传文件:
servlet类方法:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try {
// Use an advanced form of the constructor that specifies a character
// encoding of the request (not of the file contents) and a file
// rename policy.
RenamePolicyCos cospolicy = new RenamePolicyCos();
MultipartRequest multi =
new MultipartRequest(request, request.getRealPath("/UploadImages"), 10*1024*1024,
"ISO-8859-1", cospolicy);
out.println("PARAMS:"+"<br>");
Enumeration params = multi.getParameterNames();
while (params.hasMoreElements()) {
String name = (String)params.nextElement();
String value = multi.getParameter(name);
out.println(name + "=" + value+"<br>");
}
out.println();
out.println("FILES:"+"<br>");
Enumeration files = multi.getFileNames();
while (files.hasMoreElements()) {
String name = (String)files.nextElement();
String filename = multi.getFilesystemName(name);
String originalFilename = multi.getOriginalFileName(name);
String type = multi.getContentType(name);
File f = multi.getFile(name);
out.println("name=" + name+"<br>");
out.println("filename: " + filename+"<br>");
out.println("originalFilename: " + originalFilename+"<br>");
out.println("type: " + type+"<br>");
if (f != null) {
out.println("f.toString(): " + f.toString()+"<br>");
out.println("f.getName(): " + f.getName()+"<br>");
out.println("f.exists(): " + f.exists()+"<br>");
out.println("f.length(): " + f.length()+"<br>");
}
out.println();
}
}
catch (IOException lEx) {
this.getServletContext().log(lEx, "error reading or saving file");
}
}
防止文件重名的类,该类主要用在MultipartRequest multi的初始化中:
package com.struts.dao;
import java.io.File;
import com.oreilly.servlet.multipart.FileRenamePolicy;
import java.util.Random;
/** */
/**
* Cos组件的重命名策略
*
*
*/
public class RenamePolicyCos implements FileRenamePolicy {
/** */
/**
* 重载该方法,命名规则为在文件名后面加上"_随即数" 用于cos组件
*
* @param file
* File
* @return File
*/
public File rename(File file) {
// System.out.println(new String file.getName().getBytes("iso-8859-1"));
file = new File(file.getParent(), getNewFileName(file.getName()));
return file;
}
/** */
/**
* 防止文件名重复,将文件重命名 用于cos组件
*
* @param fileName
* String
* @param filerealpath
* String
* @return String
*/
public String getNewFileName(String fileName) {
String fType = getFiletype(fileName); // 文件类型
String ffrontname = getFilefrontname(fileName); // 文件名前缀
// 替换前缀名中包含的特殊字符,视具体情况而定
ffrontname = ffrontname.replace(',', '_');
ffrontname = ffrontname.replace('#', '_');
ffrontname = ffrontname.replace('&', '_');
ffrontname = ffrontname.replace('%', '%');
// System.out.println(ffrontname);
Random rand = new Random();
String newFileName = ffrontname + "_" + rand.nextInt(1000) + "."
+ fType;
return newFileName;
}
/** */
/**
* 取文件名后缀 用于cos组件
*
* @param fileName
* String
* @return String
*/
public static String getFiletype(String fileName) {
String type = "";
if (fileName == null || fileName.equals("")) {
return type;
}
int position = fileName.lastIndexOf(".");
if (position != -1) {
type = fileName.substring(position + 1, fileName.length());
}
return type;
}
/** */
/**
* 取文件名前缀 用于cos组件
*
* @param fileName
* String
* @return String
*/
public static String getFilefrontname(String fileName) {
String name = "";
if (fileName == null || fileName.equals("")) {
return name;
}
int position = fileName.lastIndexOf(".");
if (position != -1) {
name = fileName.substring(0, position);
}
String newname = "";
newname = name.trim().replaceAll(" ", "");
newname = newname.replaceAll("%", "_");
newname = newname.replaceAll("//+", "_"); // + 模式匹配规则表达式,需要用/转义
return newname;
}
}