利用bootsrap控件 实现文件上传功能

一、jsp页面

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2 <%@ page buffer="16kb"%>
 3 <%
 4 String path = request.getContextPath();
 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 6 %>
 7 <!DOCTYPE html>
 8 <html lang="en">
 9 <head>
10 <meta charset="UTF-8" />
11 <title>Data file input</title>
12 <link
13     href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
14     rel="stylesheet">
15 <link href="css/uploadFile/fileinput.css" media="all" rel="stylesheet"
16     type="text/css" />
17 <link href="themes/uploadFile/explorer/theme.css" media="all"
18     rel="stylesheet" type="text/css" />
19 <script
20     src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
21 <script src="js/uploadFile/plugins/sortable.js" type="text/javascript"></script>
22 <script src="js/uploadFile/fileinput.js" type="text/javascript"></script>
23 <script src="js/uploadFile/fileinput_locale_fr.js"
24     type="text/javascript"></script>
25 <script src="js/uploadFile/fileinput_locale_es.js"
26     type="text/javascript"></script>
27 <script src="themes/uploadFile/explorer/theme.js" type="text/javascript"></script>
28 <script
29     src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
30     type="text/javascript"></script>
31 <script type="text/javascript">
32
33 </script>
34 </head>
35 <body>
36     <div class="container kv-main">
37         <div class="page-header">
38             <h1>Data File Input</h1>
39         </div>
40
41         <form id="uploadfileform" method="post" action="uploadFile"
42             enctype=multipart/form-data>
43
44             <div class="form-group">
45                 <input id="file" type="file" name="file" class="file"
46                     data-upload-url="#">
47             </div>
48
49             <div class="form-group">
50                 <button class="btn btn-warning" type="button">Disable Test</button>
51                 <button class="btn btn-info" type="reset">Refresh Test</button>
52                 <!--   <button class="btn btn-primary" type="button" onclick=" judgeUpload();">Submit</button>-->
53                 <button class="btn btn-primary" type="submit">Submit</button>
54                 <button class="btn btn-default" type="reset">Reset</button>
55             </div>
56
57         </form>
58         <br>
59     </div>
60 </body>
61 <script type="text/javascript">
62 $(function () {
63     //0.初始化fileinput
64     var oFileInput = new FileInput();
65     oFileInput.Init("file", "/uploadFile");  //file为文件控件的id,uploadFile为后台接受上传文件的servlet
66 });
67 var FileInput = function () {
68     var oFile = new Object();
69     //初始化fileinput控件(第一次初始化)
70     oFile.Init = function(ctrlName, uploadUrl) {
71     var control = $(‘#‘ + ctrlName);
72     //初始化上传控件的样式
73     control.fileinput({
74         language: ‘zh‘, //设置语言
75         uploadUrl: ‘/deke.Business/FileUploadServlet‘, //上传的地址即后台接受上传文件的servlet.
76         allowedFileExtensions: [‘csv‘, ‘arff‘],//接收的文件后缀
77         showUpload: true, //是否显示上传按钮
78         showCaption: false,//是否显示标题
79         browseClass: "btn btn-primary", //按钮样式
80         maxFileCount: 10, //表示允许同时上传的最大文件个数
81         enctype: ‘multipart/form-data‘,
82         validateInitialCount:true,
83         previewFileIcon: "<i class=‘glyphicon glyphicon-king‘></i>",
84         msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!",
85     });
86     //导入文件上传完成之后的事件
87     $("#file").on("fileuploaded", function (event, data, previewId, index) {
88         alert("上传成功");
89     });
90 }
91     return oFile;
92 };
93 </script>
94 </html>

注意事项:

1.引入bootstrap中的控件。

在该jsp页面中引入的js和css中最基本的两个控件是

bootstrap-fileinput/css/fileinput.min.css

bootstrap-fileinput/js/fileinput.min.js

其他的都是辅助样式。

2.两行关键代码:

<form id="uploadfileform" method="post" action="uploadFile" enctype=multipart/form-data> 表单提交中的编码格式必须指定为 enctype=multipart/form-data 。
<input id="file" type="file" name="file" class="file" data-upload-url="#">id="file" :在jsp页面最后的提交表单的js函数中会用到。上述代码中的65行和85行。data-upload-url="#":这句代码删除之后,页面内的拖拽文件上传的布局会消失。(还不太清楚为什么。)
3.重要的JS初始化

1上述代码61-92行中的js脚本是用来初始化fileinput控件。  其中最重要的是要指定文件上传的url(65行和75行),即文件要交给哪个servlet来处理。否则即使在表单中指定了action,后台也是无法接收到上传的文件。

2.fileinput()方法里面传入的是一个json数据,它里面有很多属性,每个属性代表着初始化上传控件的时候的特性。如果这些属性都不设置,则表示使用默认的设置。可以打开fileinput.js的源码,如图:


二、后台代码

 1 package deke.Business;
 2
 3 import java.io.File;
 4 import java.io.IOException;
 5 import java.io.PrintWriter;
 6 import java.util.List;
 7
 8 import javax.servlet.RequestDispatcher;
 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.servlet.http.HttpSession;
14
15 import org.apache.commons.fileupload.FileItem;
16 import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
17 import org.apache.commons.fileupload.FileUploadException;
18 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
19 import org.apache.commons.fileupload.servlet.ServletFileUpload;
20
21 public class FileUploadServlet extends HttpServlet {
22
23     private static final long serialVersionUID = 1L;
24
25     // location to store file uploaded
26     private static final String UPLOAD_DIRECTORY = "upload";
27
28     // upload settings
29     private static final int MEMORY_THRESHOLD   = 1024 * 1024 * 3;
30     private static final int MAX_FILE_SIZE      = 1024 * 1024 * 40;
31     private static final int MAX_REQUEST_SIZE   = 1024 * 1024 * 50;
32
33     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
34         response.setCharacterEncoding("GBK");
35         PrintWriter out = response.getWriter();
36         if (!ServletFileUpload.isMultipartContent(request)) {
37             out.println("Error: Form must has enctype=multipart/form-data.");
38             out.flush();
39             return;
40         }
41
42         DiskFileItemFactory factory = new DiskFileItemFactory();
43         factory.setSizeThreshold(MEMORY_THRESHOLD);
44         factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
45
46         ServletFileUpload upload = new ServletFileUpload(factory);
47         upload.setFileSizeMax(MAX_FILE_SIZE);
48         upload.setSizeMax(MAX_REQUEST_SIZE);
49         String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIRECTORY;
50         File uploadDir = new File(uploadPath);
51         if (!uploadDir.exists()) {
52             uploadDir.mkdir();
53         }
54         List<FileItem> formItems = null;
55         try {
56             formItems = upload.parseRequest(request);
57             if(formItems == null || formItems.size() == 0) {
58                 response.sendRedirect("main.jsp");
59                 return;
60             }
61
62             for (FileItem item : formItems) {
63                 if (!item.isFormField()) {
64                     String fileName = new File(item.getName()).getName();
65                     String filePath = uploadPath + File.separator + fileName;
66                     File storeFile = new File(filePath);
67                     item.write(storeFile);
68                     HttpSession mysession = request.getSession();
69                     mysession.setAttribute("fileName", fileName);
70                     mysession.setAttribute("filePath", filePath);
71                     mysession.setAttribute("uploadFile", storeFile);
72                 }
73             }
74
75         } catch (FileUploadException e) {
76             if (e instanceof SizeLimitExceededException) {
77                 out.print("<script>alert(‘文件上传超过最大限制:" + MAX_FILE_SIZE + "瀛楄妭‘);history.back();</script>");
78                 return;
79             }
80         } catch (Exception e) {
81             e.printStackTrace();
82         }
83
84         request.getRequestDispatcher("/main.jsp").forward(request,response);
85     }
86 }
时间: 2024-10-25 23:14:43

利用bootsrap控件 实现文件上传功能的相关文章

在EasyUI项目中使用FileBox控件实现文件上传处理

我在较早之前的随笔<基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用>Web框架介绍中介绍了基于Uploadify的文件上传操作,免费版本用的是Jquery+Flash实现文件的上传处理,HTML5收费版本的没有试过.随着Flash逐渐退出整个环境,很多浏览器都可能不再支持Flash的了,因此在更新原有EasyUI整个框架的时候,我们对框架全面进行了完善,包括替换了这个Uploadify的文件上传模块,使用EasyUI内置的FileBox控件,结合Jq

WebForm之FileUpload控件(文件上传)

FileUpload控件要与Button.LinkButton.ImageButton配合使用 FileUpload控件的方法及属性: 1.SaveAs("要上传到服务器的绝对路径")方法:用来上传文件 注:一般使用Server.MapPath()方法进行相对路径与绝对路径之间的转换. 2.FileName属性:要上传文件的文件名,不带路径 3.PostedFile.ContentLength属性:获得上传文件的字节长度,除以1024,得到KB <一>最简单的上传 //点击

.Net neatupload上传控件实现文件上传的进度条

1. 引入bin文件 (可以到neatupload官网下载,也可以到教育厅申报系统中找) 2. 将控件加入到工具栏,在工具栏中点鼠标右键,如图: 3. 加入neatuplaod这个文件夹(可以到neatupload官网下载,也可以到教育厅申报系统中找) 4. Webconfig的配置(3个地方) <configSections>配置节下配置: <!--配置NeatUpload sectionGroup配置节--> <sectionGroup name="system

利用Struts拦截器完成文件上传功能

Struts2的图片上传以及页面展示图片 在上次的CRUD基础上加上图片上传功能 (https://www.cnblogs.com/liuwenwu9527/p/11108611.html) 文件上传:三种上传方案1.上传到tomcat服务器2.上传到指定文件目录,添加服务器与真实目录的映射关系,从而解耦上传文件与tomcat的关系文件服务器3.在数据库表中建立二进制字段,将图片存储到数据库(现在基本不用了) 我们使用第二种方法实现图片上传 实现效果如下: 首先是展示页面 clzList.jsp

利用spring的MultipartFile实现文件上传【原】

利用spring的MultipartFile实现文件上传 主要依赖jar包 spring-web-3.0.6.RELEASE.jar 用到 (org.springframework.web.multipart.MultipartFile)commons-fileupload-1.3.1.jarcommons-logging-1.0.4.jar 前台 <!DOCTYPE html> <html lang="en"> <head> <meta ch

利用Socketserver实现简单的文件上传

利用Socketserver实现简单的文件上传 server.py #!/usr/bin/env python #coding:utf-8 import SocketServer import os class MyServer(SocketServer.BaseRequestHandler):     def handle(self):         base_path = 'C:/temp'         conn = self.request                 print

使用Commons FileUpLoad组件实现文件上传功能

Commons 是Apache开放的源码组织的一个java子项目,该项目主要涉及一些开发中常用的模块,如文件上传,命令行处理,数据库连接池等.FileUpLoad就是其中的一个用于处理HTTP文件上传的子项目.Commons FileUpLoad组建具有以下几个特点: 1.使用简单:Commons FileUpLoad组件可以方便的嵌入JSP文件中,在JSP文件中仅编写少量代码就可完成文件上传功能,十分方便. 2.能够全程控制上传的内容:使用Commons FileUpLoad组件提供的对象及操

如何在Web页面中集成文件上传功能

当前,个人主页制作非常流行.当用户开发好自己的页面时,需要将文件传输到服务器上,解决这个问题的方法之一 是运行FTP服务器并将每个用户的FTP默认目录设为用户的Web主目录,这样用户就能运行FTP客户程序并上传文件到指定的 Web目录.由于Windows NT 和 Windows98均不提供直接的基于窗口形式的FTP客户程序,用户必须懂得如何使用基于命令行 的FTP客户,或掌握一种新的基于窗口形式的FTP客户程序.因此,这种解决方案仅对熟悉FTP且富有经验的用户来说是可行 的. 如果我们能把文件

使用cos.jar包实现文件上传功能

我们经常做项目时要用到文件上传功能,同时还要控制文件大小与文件类型,文件的重命名等功能:今天跟大家讲解一下使用cos.jar包来实现文件上传与控制的功能吧. 第一步:要把cos.jar文件拷贝到WEB-INF/lib文件夹 第二步:创建上传的jsp文件,upload.jsp,页面的表单必须有如下2个属性,并且值是固定的 1.enctype="multipart/form-data"2.method = "post" 页面完整代码如下: <%@ page lan