常用上传组件提交参数的问题
来源:互联网 发布:周立功单片机有限公司 编辑:程序博客网 时间:2024/05/29 16:25
今天添加了个功能,就是在注册页面增加一个上传用户头像的功能,看似很简单,随便用一个常用组件就能搞定,可实际情况超出想象。开始用的是commoms-fileupload结合commons-io组件,用servlet来实现,部分代码如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
RequestDispatcher rd = null;
// 文件上传
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(request);
Iterator it = items.iterator();
while (it.hasNext()) {
FileItem item = (FileItem) it.next();
if (item.getName() != null && !item.equals("")) {
File tempFile = new File(item.getName());
File file = new File(sc.getRealPath("/") + str, tempFile.getName());
item.write(file);
}
}
} catch (Exception e) {
request.setAttribute(Constants.REGISTER_FAILURE, "注册失败,请重新注册");
rd = request.getRequestDispatcher("/register.jsp");
e.printStackTrace();
}
//提交其他文本域的值
String username = request.getParameter("username");
String password = request.getParameter("password");
String email = request.getParameter("email");
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setEmail(email);
// System.out.println("test the username : "+username);
// 判断用户名是否已经存在
if (username != null && !username.equals("") && Crud.isExist(username)) {
request.setAttribute(Constants.USERNAME_EXISTENCE,"此用户名已存在,请重新注册一个用户名");
rd = request.getRequestDispatcher("/register.jsp");
} else {
// 是否已经插入到数据库中
if (username != null && !username.equals("") && Crud.insertNewUser(user)) {
request.setAttribute(Constants.REGISTER_SUCCESS,"注册成功,欢迎登陆");
rd = request.getRequestDispatcher("/login.jsp");
} else {
request.setAttribute(Constants.REGISTER_FAILURE,"注册失败,请重新注册");
rd = request.getRequestDispatcher("/register.jsp");
}
}
rd.forward(request, response);
执行完这页代码后,文件能上传到本地服务器指定的文件夹,但插入数据库的那条记录所有字段莫名其妙的显示为null,简单的测试了下,发觉所有获取的其他文本域的值为null,即没有获取到值,原来是因为提交过来的表单的属性设为了enctype="multipart/form-data",但如果把该属性去掉又不能获得上传上类的文件,怎么办?既要获取上传文件又要获取其他文本参数值,用commons-fileupload结合commons-io貌似很难办到,所以舍弃了这个组件,改用jspsmartupload上传组件,很快既获得了上传文件,又获取了其他参数值,不过获取参数值时要稍微有所变化。部分代码如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
RequestDispatcher rd = null;
//smartupload文件上传
SmartUpload su = new SmartUpload();
su.initialize(servletConfig,request,response); //进行初始化
try {
su.upload();
su.save(sc.getRealPath("/")+str); //保存在指定的文件夹
} catch (SmartUploadException e) {
e.printStackTrace();
}
//用jspsmartupload组件的方法取得文本域的值
String username = su.getRequest().getParameter("username");
String password = su.getRequest().getParameter("password");
String email = su.getRequest().getParameter("email");
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setEmail(email);
// 判断用户名是否已经存在
if (username != null && !username.equals("") && Crud.isExist(username)) {
request.setAttribute(Constants.USERNAME_EXISTENCE,"此用户名已存在,请重新注册一个用户名");
rd = request.getRequestDispatcher("/register.jsp");
} else {
// 是否已经插入到数据库中
if (username!= null && !username.equals("") && Crud.insertNewUser(user)) {
request.setAttribute(Constants.REGISTER_SUCCESS,"注册成功,欢迎登陆");
rd = request.getRequestDispatcher("/login.jsp");
} else {
request.setAttribute(Constants.REGISTER_FAILURE,"注册失败,请重新注册");
rd = request.getRequestDispatcher("/register.jsp");
}
}
rd.forward(request, response);
}
注意获取参数值时是su.getRequest().getParameter("username") ,不是request.getParameter("username");
- 常用上传组件提交参数的问题
- 多表单提交 - 再谈JSP使用SmartUpload组件上传的中文问题
- CURL模拟表单post提交及相关常用参数的使用(包括提交表单同时上传文件)
- CURL模拟表单post提交及相关常用参数的使用(包括提交表单同时上传文件)
- 参数重复提交的问题
- 应用提交上传appstore遇到的问题
- APP 上传提交遇到的问题
- 解决Ajax提交参数丢失的问题
- 继续上次的android上传文件携带参数POST提交
- httpClient post提交文件上传参数的方法
- FileUpload组件 上传不了文件的问题
- 前端常用组件-文件上传组件
- ExtJs的一些组件中常用的参数、属性整理
- HttpWebRequest提交Form和上传文件的认证问题
- jqeury form 提交表单的问题(上传文件进度)
- 文件上传类型表单不能提交的问题
- 图表组件常用参数说明
- ajax提交参数乱码问题
- 爱因斯坦曾经说过
- mysql中文编码问题
- 生成CURD脚本的存储过程
- RDLC使用手册_RDLC简单Demo
- 理解VMware虚拟机下网络连接的三种模式
- 常用上传组件提交参数的问题
- javascript 一点点介绍
- 禁止webbrowser弹出窗口,禁止webbrowser读取缓存
- javascrip 第二次课
- 2008年10大最佳IT技术认证
- 传智播客uml学习,uml图
- 自动调整Eclipse中的代码格式
- 07-Apr-2009
- php运用readfile函数给隐藏下载文件地址增加权限判断