日期:2014-05-20  浏览次数:20838 次

关于无ActionForm的Action中的编码问题~
大家好,我现在在用commons-fileupload做一个上传文件的功能~

用的是无actionform的action来接收数据和跳转~
现在的问题是为什么我接收的文件正常,但是表单内的一般数据中文变成乱码~?
如果带actionform的action获取的中文就是正常~
我在action中写了request.setCharacterEncoding("utf-8");还是没用~请问应该怎么办~?
我的页面也是utf-8的~
谢谢~

另外,由于我刚接触上传,请问应该怎么做才能把上传的文件保存到指定的目录里去,我现在上传的都老是保存到临时目录里~郁闷- -

另外另外,fi.getName()获取的为什么是完整的文件路径,而不是文件名呢~?请问应该怎么获取文件名~?谢谢~

以下这一段是我用的~

if (logger.isInfoEnabled()) {
logger.info("上传文件例子...");
}
request.setCharacterEncoding("utf-8");

try {
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置内存缓冲区大小
factory.setSizeThreshold(4096);
// 设置临时目录
factory.setRepository(new File(
"D:/EclipseWorkspace/hlgc/WebRoot/upload/temp"));

ServletFileUpload sfu = new ServletFileUpload(factory);
// 设置文件大小上限,-1表示无上限
sfu.setSizeMax(1024 * 1024 * 10);

List<FileItem> items = sfu.parseRequest(request);
Iterator<FileItem> i = items.iterator();
while (i.hasNext()) {
FileItem fi = (FileItem) i.next();
if (fi.isFormField()) {
System.out.println(fi.getFieldName() + " " + fi.getName()
+ " " + fi.getString());
} else {
if (StringUtils.isNotBlank(fi.getName())) {
System.out.println(fi.getFieldName() + " "
+ fi.getName() + " " + fi.isInMemory()
+ " " + fi.getContentType() + " "
+ fi.getSize());
File file = new File(fi.getName());
// 这里可以插入得到缩略图的方法,当然最好还是写成单独一个//方法比较好;
fi.write(file);
}
}
}
System.out.print("文件上传成功");
} catch (Exception e) {
e.printStackTrace();
}
return null;

------解决方案--------------------
许多临时文件都不会自动删除的,他们就是垃圾。需要定时清理

呵呵!