首页 > 编程 > JSP > 正文

servlet+JSP+mysql实现文件上传的方法

2024-09-05 00:22:25
字体:
来源:转载
供稿:网友
这篇文章主要介绍了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端<form>表单的ENCTYPE属性值为multipart/form-data,它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法,<input>的type属性必须是file。

实现过程:
 

  1. package cn.csdn.web.servlet; 
  2. import java.io.File; 
  3. import java.io.FileOutputStream; 
  4. import java.io.IOException; 
  5. import java.io.InputStream; 
  6. import java.sql.SQLException; 
  7. import java.util.List; 
  8. import java.util.UUID; 
  9. import javax.servlet.ServletException; 
  10. import javax.servlet.http.HttpServlet; 
  11. import javax.servlet.http.HttpServletRequest; 
  12. import javax.servlet.http.HttpServletResponse; 
  13. import javax.sql.DataSource; 
  14. import org.apache.commons.dbutils.QueryRunner; 
  15. import org.apache.commons.fileupload.FileItem; 
  16. import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException; 
  17. import org.apache.commons.fileupload.FileUploadException; 
  18. import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
  19. import org.apache.commons.fileupload.servlet.ServletFileUpload; 
  20. import cn.csdn.web.c3p0.DBManager_c3p0; 
  21. public class Upload2Servlet extends HttpServlet { 
  22. /** 
  23.  
  24. */ 
  25. private static final long serialVersionUID = 1L; 
  26. public void doGet(HttpServletRequest request, HttpServletResponse response) 
  27. throws ServletException, IOException { 
  28. doPost(request,response); 
  29. public void doPost(HttpServletRequest request, HttpServletResponse response) 
  30. throws ServletException, IOException { 
  31. request.setCharacterEncoding("UTF-8"); 
  32. try { 
  33. //实例化一个文件工厂  
  34. DiskFileItemFactory factory=new DiskFileItemFactory(); 
  35. factory.setRepository(new File("C://osp")); 
  36. String paramName=null
  37. String paramValue=null
  38. //配置上传组件ServletFileUpload  
  39. ServletFileUpload upload=new ServletFileUpload(factory); 
  40. upload.setHeaderEncoding("UTF-8"); 
  41. upload.setFileSizeMax(1024*1024); 
  42. //从request得到所有上传域的列表  
  43. List<FileItem> list=upload.parseRequest(request); 
  44. for(FileItem item:list){ 
  45. //如果是上传域的文件域  
  46. if(item.isFormField()){ 
  47. //表单普通输入项 
  48. paramName = item.getFieldName(); //上传于的Name 
  49. // String paramValue=item.getString(); 
  50. // paramValue=new String(paramValue.getBytes("iso8859-1"),"UTF-8"); 
  51. paramValue=item.getString("UTF-8"); 
  52. System.out.println(paramName+"="+paramValue); 
  53. }else
  54. //上传文件处理 
  55. String fileName = item.getName(); 
  56. fileName=fileName.substring(fileName.lastIndexOf("//")+1); //截取扩展名  
  57. System.out.println("name="+fileName); 
  58. if(!fileName.equals("")){ 
  59. // fileName=refactorFileName(fileName); 
  60. InputStream in=item.getInputStream(); 
  61. File file = new File("c://"+fileName); 
  62. FileOutputStream os=new FileOutputStream(file); 
  63. byte[] buf = new byte[1024]; 
  64. int len=0; 
  65. while((len=in.read(buf))>0){ 
  66. os.write(buf,0,len); 
  67. os.flush(); 
  68. os.close(); 
  69. in.close(); 
  70. item.delete(); 
  71. request.setAttribute("message""文件上传成功"); 
  72. try { 
  73. DataSource ds = DBManager_c3p0.getDataSource(); 
  74. QueryRunner runner = new QueryRunner(ds); 
  75. String sql = "insert into user(name,file) values(?,?)"
  76. Object[] params = {paramValue,fileName}; 
  77. runner.update(sql, params); 
  78. catch (SQLException e) { 
  79. // TODO Auto-generated catch block 
  80. e.printStackTrace(); 
  81. catch(FileSizeLimitExceededException e1){ 
  82. e1.printStackTrace(); 
  83. request.setAttribute("message""文件尺寸太大"); 
  84. }catch (FileUploadException e) { 
  85. // TODO Auto-generated catch block 
  86. e.printStackTrace(); 
  87. request.setAttribute("message""文件上传失败"); 
  88. request.getRequestDispatcher("/message.jsp").forward(request, response); 
  89. // public String refactorFileName(String fileName){ 
  90. // return UUID.randomUUID().toString()+"_"+fileName; 
  91. // } 
?
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表