|
楼主 |
发表于 2006-9-24 19:24
|
显示全部楼层
使用欧莱礼的文件上传工具 cos-05Nov2002.zip,按照示例代码改写,两种方法都成功上传了文件.
使用: MultipartRequest multi = new MultipartRequest(request, dirName, 10*1024*1024, "GBK", new DefaultFileRenamePolicy()); 有自动更改文件名的功能.
如果使用: MultipartParser mp = new MultipartParser(request, 10*1024*1024); 遇到已有同名文件时就会覆盖它。
本来应该用第一种方法的,可我偏偏选了第二种方法。因为已经写了一大半,不想改,就自己实现自动更名的功能了。
除了这点,还有一个问题不可以不注意。因为用来上传文件的表单是这样的:
<form action="articleAction?action=add" enctype="multipart/form-data" method="post">
而我要做的并不是单单传文件,而是文章加附件的形式,所以要传文件和一般的文本字符。因为enctype="multipart/form-data" 使我不能用一平常的 getParameter()来取得参数。还好,这个上传组件有它自己的方法来取得参数。
private void addActicle(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HashMap<String, String> hm = new HashMap<String, String>(15);
try {
MultipartParser mp = new MultipartParser(request, 2 * 1024 * 1024,
true, true, "GBK"); // 2MB
Part part;
int i = 0;
while ((part = mp.readNextPart()) != null) {
String name = part.getName();
if (part.isParam()) {
ParamPart paramPart = (ParamPart) part;
String value = paramPart.getStringValue();
if(value==null||value.length()<1)
{
logger.debug("parameter is not right");
redirect(request, response, toPage, "请填写标题和内容");
return;
}
hm.put(name, value);
} else if (part.isFile()) {
FilePart filePart = (FilePart) part;
String fileName = filePart.getFileName();
if (fileName != null) {
if (i>=2)break;
hm.put(name, autoRenameFile(new File(dir, fileName)));
long size = filePart
.writeTo(new File(dir, hm.get(name)));
}
}
}
} catch (IOException lEx) {
logger.error("error reading or saving file");
}
String title = hm.get("title");
。。。。。。
- private String autoRenameFile(final File file) {
- File f = file;
- String d = file.getAbsolutePath();
- int i = d.lastIndexOf(f.separator);
- int j = d.lastIndexOf(".");
- while (f.exists()) {
- f = new File(d.substring(0, i) + d.substring(i, j)
- + new Random().nextInt() + d.substring(j, d.length()));
- }
- String str = f.getAbsolutePath();
- return str.substring(str.lastIndexOf(f.separator) + 1, str.length());
- }
复制代码
[ 本帖最后由 powerwind 于 2006-9-25 00:16 编辑 ] |
|