fileupload包实现上传需要小心的地方

最近用fileupload包做上传下载,被file类型和非file表单类型的获取文件名和文件获取表单值给弄混了,在这写一下自己的总结!

自己就做了一个小例子(用servlet)如下:

up.jsp
<form action="/struts2/uploadServlet" method="post" enctype="multipart/form-data">
filename:<input type="text" name="name">
<br>
file1:<input type="file" name="file1"><br/>
file2:<input type="file" name="file2"><br>
<input type="submit" value="submit">


uploadServlet.java

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {


DiskFileItemFactory disk=new DiskFileItemFactory();//new一个磁盘文件条目工厂对象
String path=request.getRealPath("/upload");
disk.setRepository(new File(path));//设置临时文件
disk.setSizeThreshold(1024*1024);//设置放在内存中的最大容量,超过了则放置在临时文件里
ServletFileUpload upload=new ServletFileUpload(disk);//构造了一个上传文件的上传类

try {
List<FileItem> list=upload.parseRequest(request);

for(FileItem file:list){
if(file.isFormField()){//判断是否是除了file类型外的其他表单
String name=file.getFieldName();//得到简单类型表单的name
String value=file.getString("gbk");
System.out.println(name);//check!
request.setAttribute(name,value);
}else
{

String name=file.getFieldName();//得到file类型表单的name
System.out.println(name);
String value=file.getName();//得到表单里的值(就是那个全路径)
System.out.print(value);
//保证取得的名字是文件名,而不包括文件的路径
int tag=value.lastIndexOf("\\");
String filename=value.substring(tag+1);

System.out.println(filename);
request.setAttribute(name,filename);

//System.out.println("in servlet");//check!

file.write(new File(path,filename));

}

}


} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.getRequestDispatcher("upload/MyJsp.jsp").forward(request,response);



}

[color=red]
获取表单名都是用getFileName()方法
这里最关键的是 是非file表单用getString("encoding")来获得表单的value
而file表单则用getName()方法来获取file表单的value (感觉这个方法取名不太合理啊!误导人啊!)[/color]


MyJsp.jsp


name:${requestScope.name}<br>
file:${requestScope.file1}<br>
file2:${requestScope.file2}<br>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值