JSP文件上传

本文介绍了两种JSP文件上传的方法,一种是使用COS组件,另一种是使用JSPSmartLoad组件。通过示例代码详细展示了如何配置文件上传的路径、大小限制及文件类型的过滤,并实现了文件重命名策略。

好久没有用到文件上传了,很多的细节都忘记了,今天学习了一下,与大家分享,首先来看下性能较高的COS。
关于cos的历史就不啰嗦了,大家在Google一下就可以找到很多,主要来看下他的用法,在jsp中:

<formenctype="multipart/form-data"method="post"action="UploadServlet.do">
<inputtype="text"name="userName"/>
<p>上传文件1:<inputtype="file"name="File1"size="20"maxlength="20"><br>
<p>上传文件2:<inputtype="file"name="File2"size="20"maxlength="20"><br>
<p>上传文件3:<inputtype="file"name="File3"size="20"maxlength="20"><br>
<p>上传文件4:<inputtype="file"name="File4"size="20"maxlength="20"><br>
<inputtype="submit"value="上传">
</form>

然后在UploadServlet中:

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//存绝对路径
//StringfilePath="C://upload";
//存相对路径
StringfilePath=getServletContext().getRealPath("/")+"upload";
FileuploadPath
=newFile(filePath);
//检查文件夹是否存在不存在创建一个
if(!uploadPath.exists())
{
uploadPath.mkdir();
}
//文件最大容量5M
intfileMaxSize=5*1024*1024;
//存放文件描述
String[]fileDiscription={null,null};
//文件名
StringfileName=null;
//上传文件数
intfileCount=0;
//重命名策略
RandomFileRenamePolicyrfrp=newRandomFileRenamePolicy();
//上传文件
MultipartRequestmulit=newMultipartRequest(request,filePath,fileMaxSize,"UTF-8",rfrp);

StringuserName
=mulit.getParameter("userName");
System.out.println(userName);

Enumerationfilesname
=mulit.getFileNames();
while(filesname.hasMoreElements()){
Stringname
=(String)filesname.nextElement();
fileName
=mulit.getFilesystemName(name);
StringcontentType
=mulit.getContentType(name);

if(fileName!=null){
fileCount
++;
}
System.out.println(
"文件名:"+fileName);
System.out.println(
"文件类型:"+contentType);

}
System.out.println(
"共上传"+fileCount+"个文件!");

}


注意的是文件重命名策略,我们需要实现FileRenamePolicy接口中的rename方法:

packagecom.kay.util;

importjava.io.File;
importjava.util.Date;

importcom.oreilly.servlet.multipart.FileRenamePolicy;

publicclassRandomFileRenamePolicyimplementsFileRenamePolicy{

@Override
publicFilerename(Filefile){
Stringbody
="";
Stringext
="";
Datedate
=newDate();
intpot=file.getName().lastIndexOf(".");
if(pot!=-1){
body
=date.getTime()+"";
ext
=file.getName().substring(pot);
}
else{
body
=(newDate()).getTime()+"";
ext
="";
}
StringnewName
=body+ext;
file
=newFile(file.getParent(),newName);
returnfile;

}

}

cos的上传比较简单,但是我还没有发现怎么过滤文件后缀,知道的朋友给说下,所以我又看了JSPSmartLoad组件:
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//文件上传个数
intcount=0;
//文件上传地址
StringfilePath=getServletContext().getRealPath("/")+"smartUpload";

//如果文件夹不存在则创建这个文件夹
Filefile=newFile(filePath);
if(!file.exists())
{
file.mkdir();
}
//初始化对象
SmartUploadsu=newSmartUpload();
su.initialize(getServletConfig(),request,response);

//设置文件最大容量
su.setMaxFileSize(10*1024*1024);
//设置所有文件最大容量
su.setTotalMaxFileSize(100*1024*1024);
//设置上传文件类型
su.setAllowedFilesList("rar,txt,jpg,bmp,gif");



try{
//设置禁止上传的文件类型
su.setDeniedFilesList("jsp,js,html,css");
//上传文件
su.upload();
System.out.println(
"userName="+su.getRequest().getParameter("userName"));
count
=su.save(filePath);
}
catch(SQLExceptione){
e.printStackTrace();
}
catch(SmartUploadExceptione){
e.printStackTrace();
}

for(inti=0;i<su.getFiles().getCount();i++){
com.jspsmart.upload.FiletempFile
=su.getFiles().getFile(i);
System.out.println(
"-------------------------------------------------");
System.out.println(
"表单项名称:"+tempFile.getFieldName());
System.out.println(
"文件名:"+tempFile.getFileName());
System.out.println(
"文件长度:"+tempFile.getSize());
System.out.println(
"文件扩展名:"+tempFile.getFileExt());
System.out.println(
"文件全名:"+tempFile.getFilePathName());
System.out.println(
"-------------------------------------------------");
}
System.out.println(
"上传成功!共"+count+"个文件!");


}
在这个方法中需要注意的是,我们要拿表单上的其他元素的值,我们需要在su.upload()方法后去使用su.getRequest().getParameter("userName")来获得表单的值,不能使用request。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值