servlet+JSP+mysql实现文件上传的方法
实现文件上传的方法
主要介绍了servlet+JSP+mysql实现文件上传的方法,涉及JSP文件传输与判断及数据库操作的相关技巧,具有一
定参考借鉴价值,需要的朋友可以参考下
本文实例讲述了servlet+JSP+mysql实现文件上传的方法。分享给大家供大家参考,具体如下:
一、文件上传的基本操作:
1、 表单属性enctype的设置
multipart/form-data和application/x-www-form-urlencoded的区别
FORM元素的enctype属性指定了表单数据向服务器提交时所采用的编码类型,默认的缺省值是“application/x-www-form-
urlencoded”。
然而,在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。
在文件上载时,所使用的编码类型应当是“multipart/form-data”,它既可以发送文本数据,也支持二进制数据上载。
Browser端
System.out.println(paramName+"="+paramValue);
}else{
//上传文件处理
String fileName = item.getName();
fileName=fileName.substring(fileName.lastIndexOf("\\")+1); //截取扩展名
System.out.println("name="+fileName);
if(!fileName.equals("")){
// fileName=refactorFileName(fileName);
InputStream in=item.getInputStream();
File file = new File("c:\\"+fileName);
FileOutputStream os=new FileOutputStream(file);
byte[] buf = new byte[1024];
int len=0;
while((len=in.read(buf))>0){
os.write(buf,0,len);
}
os.flush();
os.close();
in.close();
item.delete();
request.setAttribute("message", "文件上传成功");
try {
DataSource ds = DBManager_c3p0.getDataSource();
QueryRunner runner = new QueryRunner(ds);
String sql = "insert into user(name,file) values(?,?)";
Object[] params = {paramValue,fileName};
runner.update(sql, params);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
} catch(FileSizeLimitExceededException e1){
e1.printStackTrace();
request.setAttribute("message", "文件尺寸太大");
}catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
request.setAttribute("message", "文件上传失败");
}
request.getRequestDispatcher("/message.jsp").forward(request, response);
}
// public String refactorFileName(String fileName){
// return UUID.randomUUID().toString()+"_"+fileName;
// }
}
二、上传文件要注意的有:
注意编码问题 防止出现中文乱码 上边列举出一种
其他的还有临时文件解决问题 临时文件删除问题
解决没有指定文件名的问题
判断获取的文件名是否为空
保存路径问题
如表示url资源时应该用斜杠 “/”
如表示硬盘路径时用斜杠“\\”
为保证服务器安全,上传的文件应禁止用户直接访问,通常保存在应用程序的WEB-INF目录下,或者不受WEB服务器管理的
目录
希望本文所述对大家jsp程序设计有所帮助。