bootstrap fileinput 文件上传

最近因为项目需要研究了下bootstrap fileinput的使用,来记录下这几天的使用心得吧。

前台html页面的代码

    <form role="form" id="importFile" method="post"
                        enctype="multipart/form-data">
                        <div class="row">
                            <div class="col-md-3" >
                                <input type="radio" name="excelType" class="radio" id="station" value="station"><label for="station">&nbsp;参数1</label>
                            </div>
                            <div class="col-md-3  ">
                                <input type="radio" name="excelType" class="radio" id="line" value="line"><label for="line">&nbsp;参数2</label>
                            </div>
                            <div class="col-md-3 ">
                                <input type="radio" name="excelType" class="radio" id="pipeline" value="pipeline"><label for="pipeline">&nbsp;参数3</label>
                            </div>
                            <div class="col-md-3 ">
                                <input type="radio" name="excelType" class="radio" id="jdj" value="jdj"><label for="jdj">&nbsp;参数4</label>
                            </div>
                        </div>
                        <input id="excelFile" name="excelFile" class="file-loading"
                            type="file" multiple accept=".xls,.xlsx" data-min-file-count="1"
                            data-show-preview="true"> <br>
                    </form>

js进行插件的初始化和一些参数的设置

$("#excelFile").fileinput({
                    uploadUrl:"rest/import/importExcel",//上传的地址
                    uploadAsync: true,
                    language : "zh",//设置语言
                    showCaption: true,//是否显示标题
                    showUpload: true, //是否显示上传按钮
                    browseClass: "btn btn-primary", //按钮样式 
                    allowedFileExtensions: ["xls", "xlsx"], //接收的文件后缀
                    maxFileCount: 10,//最大上传文件数限制
                    uploadAsync: true,
                    previewFileIcon: '<i class="glyphicon glyphicon-file"></i>',
                    allowedPreviewTypes: null, 
                    previewFileIconSettings: {
                        'docx': '<i class="glyphicon glyphicon-file"></i>',
                        'xlsx': '<i class="glyphicon glyphicon-file"></i>',
                        'pptx': '<i class="glyphicon glyphicon-file"></i>',
                        'jpg': '<i class="glyphicon glyphicon-picture"></i>',
                        'pdf': '<i class="glyphicon glyphicon-file"></i>',
                        'zip': '<i class="glyphicon glyphicon-file"></i>',
                    },
                    uploadExtraData: function() {
                        var extraValue = null;
                        var radios = document.getElementsByName('excelType');
                        for(var i=0;i<radios.length;i++){
                            if(radios[i].checked){
                                extraValue = radios[i].value;
                            }
                        }
                        return {"excelType": extraValue};
                    }
                });

注意: uploadExtraData函数中只能用原生JS来取值,不能用JQuery来获取值,此参数用来向后台传递附加参数,以方便处理,最简单的写法是:

uploadExtraData: {
                        "excelType": document.getElementByID('id')
                    }

文件上传成功后的回调方法


    $("#excelFile").on("fileuploaded", function(event, data, previewId, index) {
        alert("上传成功!");
        $("#excelImport").modal("hide");
        //后台处理后返回的经纬度坐标json数组,
        var array = data.response;
        console.dir(array);
        //jquery循环取经纬度坐标
        $.each(array,function(index,latAndLon){
            var lon = latAndLon.lon;
            var lat = latAndLon.lat;
            var point =  new Point(lon, lat, map.spatialReference);
            var symbol = new esri.symbol.SimpleMarkerSymbol().setStyle(
                    SimpleMarkerSymbol.STYLE_CIRCLE).setColor(
                    new Color([255,255,0,0.5]));
            var attr = {"address": "addressName" };
            var infoTemplate = new esri.InfoTemplate("标题", "地址 :${address}");
            var graphic = new Graphic(point,symbol,attr,infoTemplate);
            map.graphics.add(graphic);
        });

    });

arcgis中点的定义的两种方法:

        var point =  new Point(lon, lat, new SpatialReference({ wkid: 4326 }));
        var point =  new Point(lon, lat, map.spatialReference);

后台Java处理,使用common fileupload插件来实现,此处限制只能上传excel 文件

    public JSONArray importExcel(HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        final String allowFileSuffix = "xls,xlsx";
        Subject subject = SecurityUtils.getSubject();
        String uname = (String) subject.getPrincipal();
        String basePath = "D:" + File.separator + uname;
        File tmpDir = new File(basePath);// 初始化上传文件的临时存放目录
        JSONArray jsonArry = new JSONArray();

        if (!tmpDir.exists()) {
            tmpDir.mkdirs();
        }

        // 检查输入请求是否为multipart表单数据。
        if (ServletFileUpload.isMultipartContent(request)) {
            DiskFileItemFactory dff = new DiskFileItemFactory();// 创建该对象
            dff.setRepository(tmpDir);// 指定上传文件的临时目录
            dff.setSizeThreshold(1024000);// 指定在内存中缓存数据大小,单位为byte
            ServletFileUpload sfu = new ServletFileUpload(dff);// 创建该对象
            // sfu.setFileSizeMax(5000000);//指定单个上传文件的最大尺寸
            sfu.setSizeMax(10000000);// 指定一次上传多个文件的总尺寸
            sfu.setHeaderEncoding("utf-8");
            String type = null;

            List<FileItem> fileItems = new ArrayList<FileItem>();
            try {
                fileItems = sfu.parseRequest(request);
            } catch (FileUploadException e1) {
                System.out.println("文件上传发生错误" + e1.getMessage());
            }
            String fullPath = null;
            String fileName = null;
            for (FileItem fileItem : fileItems) {

                // 判断该表单项是否是普通类型
                if (fileItem.isFormField()) {
                    String name = fileItem.getFieldName();// 控件名
                    String value = fileItem.getString();
                    if (name.equals("excelType")) {
                        type = value;
                    }
                } else {
                    String filePath = fileItem.getName();
                    if (filePath == null || filePath.trim().length() == 0)
                        continue;
                    fileName = filePath.substring(filePath
                            .lastIndexOf(File.separator) + 1);
                    String extName = filePath.substring(filePath
                            .lastIndexOf(".") + 1);
                    fullPath = basePath + File.separator + fileName;
                    if (allowFileSuffix.indexOf(extName) != -1) {
                        try {
                            fileItem.write(new File(fullPath));
                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                    } else {
                        throw new FileUploadException("文件格式不正确");
                    }
                }
            }
            if (type.equals("station")) {
                jsonArry = readExcel(fullPath, fileName);
            } else if (type.equals("line")) {
                System.out.println("===============:line");
            } else if (type.equals("pipeline")) {
                System.out.println("===============:pipeline");
            } else if (type.equals("jdj")) {
                System.out.println("===============:jdj");
            }
        }
        return jsonArry;
    }

    // 判断文件类型
    public Workbook createWorkBook(InputStream is, String excelFileName)
            throws IOException {
        if (excelFileName.toLowerCase().endsWith("xls")) {
            return new HSSFWorkbook(is);
        }
        if (excelFileName.toLowerCase().endsWith("xlsx")) {
            return new XSSFWorkbook(is);
        }
        return null;
    }

    public JSONArray readExcel(String basePath, String fileName)
            throws FileNotFoundException, IOException {
        File file = new File(basePath);
        Workbook book = createWorkBook(new FileInputStream(file), fileName);
        JSONObject jsonObj = new JSONObject();
        JSONArray jsonArry = new JSONArray();
        Sheet sheet = book.getSheetAt(0);
        for (int i = 3; i < sheet.getLastRowNum(); i++) {
            Row row = sheet.getRow(i);
            String lon = row.getCell(2).getNumericCellValue() + "";
            String lat = row.getCell(3).getNumericCellValue() + "";
            jsonObj.put("lat", lat);// 纬度
            jsonObj.put("lon", lon);// 经度
            jsonArry.add(jsonObj);
        }
        System.out.println(jsonArry.toString());
        return jsonArry;
    }

基本流程终于走通啦,修改后记录一下跟大家分享,欢迎拍砖~~~
不定时更新,查看更新请点击这里

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
### 回答1: Bootstrap File Input是一款基于Bootstrap框架的文件上传插件,它可以让用户通过简单的操作上传文件,并且支持多种文件格式和预览功能。该插件易于使用,可以快速集成到网站或应用中,是一个非常实用的工具。 ### 回答2: Bootstrap File Input是一款用于文件上传的前端组件,它可以让用户更加方便地上传文件,并且支持预览功能。通过这个组件,我们可以快捷地实现文件的上传和展示,也可以自定义上传的样式和功能。 Bootstrap File Input的使用步骤如下: 1. 引入相关的css和js文件:在项目中引入BootstrapFile Input的css和js文件,可以通过CDN引入,也可以下载到本地之后引入。 2. 定义表单元素:可以在HTML中定义一个input元素,通过设置type为file来实现文件上传的功能。 3. 初始化File Input插件:在js中初始化File Input插件,通过设置不同的参数来实现自定义的功能。比如可以设置allowedFileExtensions来限制上传文件的类型,也可以设置showPreview来显示上传文件的预览图。 4. 使用File Input插件的监听方法:在监听事件中,可以对文件上传前、上传中、上传完成等操作进行相应的处理。比如可以在上传完成之后,获取文件的路径,然后将其保存到数据库中。 以下是一个基本的Bootstrap File Input的使用示例: HTML代码: ``` <form enctype="multipart/form-data" method="post"> <input id="file-1" name="file[]" type="file" multiple class="file" data-overwrite-initial="false" data-min-file-count="2"> </form> ``` JS代码: ``` $("#file-1").fileinput({ uploadUrl: "/file-upload-batch/2", allowedFileExtensions: ['jpg', 'png', 'gif'], overwriteInitial: false, maxFileSize: 1000, maxFilesNum: 10, dropZoneEnabled: false, showPreview: false, showUpload: true, showRemove: true, showCaption: true, fileActionSettings: { showUpload: false, showZoom: true }, initialPreview: [ "http://lorempixel.com/800/460/people/1", "http://lorempixel.com/800/460/people/2" ], initialPreviewConfig: [ {caption: "People-1.jpg", width: "120px", url: "/site/file-delete", key: 1}, {caption: "People-2.jpg", width: "120px", url: "/site/file-delete", key: 2} ] }); ``` 通过以上步骤,我们就可以使用Bootstrap File Input来实现前端文件上传的功能。这个插件还有很多其他的参数和方法,可以根据实际需要进行自定义。 ### 回答3: BootstrapFileInput是一个基于Bootstrap文件上传插件,它具有多种上传和预览文件的功能。BootstrapFileInput可以让你轻松地上传单个或多个文件,可以设置图片预览,可以限制上传文件的大小和类型,同时还有许多自定义选项。 BootstrapFileInput的使用很简单,只需要在HTML代码中引入必要的CSS和JS文件,然后在需要上传文件的地方添加相应的HTML代码即可。其中,最重要的HTML元素是<input type="file" class="file" data-preview-file-type="text">。这个元素定义了文件上传的基本参数,比如上传文件的类型和大小限制。同时,BootstrapFileInput还提供了多种选项用于自定义文件上传的行为,可以让你根据自己的需求来定制上传的功能。 除了基本的上传功能之外,BootstrapFileInput还提供了一些高级的功能,比如图片预览、文件列表、上传进度条等。这些功能可以让用户更加方便地使用文件上传功能,同时也可以增强用户体验。 总的来说,BootstrapFileInput是一个强大的文件上传插件,可以大大简化文件上传的开发工作,同时还提供了多种可定制选项,可以根据用户需求来进行定制。因此,BootstrapFileInput的使用在Web开发中是非常广泛的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值