request 的获取:
HttpServletRequest request =
ServletActionContext.getRequest();
或者:
HttpServletRequest request = this.getRequest();
强制类型转换:
主要的jar :
commons-fileupload,commons-io。
commons-fileupload包依赖于commons-io。
如果在jsp中的from表单提交一个get()请求时,
MultiPartRequestWrapper req = (MultiPartRequestWrapper)
request;
会抛出异常。
但是from表单提交一个post()请求时,
MultiPartRequestWrapper req = (MultiPartRequestWrapper)
request;
将会成功转换。
action代码:
public void attDataSave() throws IOException {
HttpServletRequest request =
ServletActionContext.getRequest();
// 上传文件
String realPath =
this.getRequest().getRealPath("/attachment") + "/";// 取系统当前路径
@SuppressWarnings("unused")
String saveUrl =
this.getRequest().getContextPath() + "/attachment/";
MultiPartRequestWrapper req
= (MultiPartRequestWrapper) request;
File[] files =
req.getFiles("file");
@SuppressWarnings("unused")
String msgString = "";
String[] fileTypes = new
String[] { "dat" }; // 定义允许上传的文件扩展名
long maxSize = 102400; //
允许最大上传文件大小
for (int i = 0; i <
files.length; i++) {
//
得到上传文件的扩展名
String
fileName = req.getFileNames("file")[i];
String
fileExt = fileName.substring(fileName.lastIndexOf(".") + 1)
.toLowerCase();
File file
= files[i];
//
检查扩展名
if (!Arrays.
asList(fileTypes).contains(fileExt)) {
msgString
= "上传文件扩展名是不允许的扩展名。";
}
//
检查文件大小
if
(file.length() > maxSize) {
msgString
= "上传文件大小超过限制。";
}
//
检查目录写入权限
File
uploadDir = new File(realPath);
if
(!uploadDir.canWrite()) {
msgString
= "上传目录没有写入权限。";
}
String
name = FileXload.uploadFile(fileName, realPath, file);
readFile(realPath,name);
}
}
jsp:
from表单中 input标签type=“file”,
name=“file”,id = "file" 。file对应到action
File[] files = req.getFiles("file");中的“file”
enctype="multipart/form-data">这句话是不可缺少的!!
加载中,请稍候......