扒一扒使用boostrap-fileinput上传插件遇到的坑,Bootstrap-fileinput上传插件的使用详解,「建议收藏」

扒一扒使用boostrap-fileinput上传插件遇到的坑,Bootstrap-fileinput上传插件的使用详解,「建议收藏」由于公司项目的需求,需要实现动植物名录的添加,包括姓名等信息和图片等,需要使用bootstrap-fileinput的上传插件,在提交添加界面表单数据的同时上传一张或者多张图片,并将上传的图片保存到本地磁盘中(本文是f:盘的目录下),在在实现的时候,不适用bootstrap-fileinput上传插件本身的上传按钮(因为本身的按钮只能上传图片),需要点击提交,将表单的其他信息和图片一起提交到后台。

大家好,又见面了,我是你们的朋友全栈君。

由于公司项目的需求,需要实现动植物名录的添加,包括姓名等信息和图片等,需要使用bootstrap-fileinput的上传插件,在提交添加界面表单数据的同时上传一张或者多张图片,并将上传的图片保存到本地磁盘中(本文是f:盘的目录下),在在实现的时候,不适用bootstrap-fileinput上传插件本身的上传按钮(因为本身的按钮只能上传图片),需要点击提交,将表单的其他信息和图片一起提交到后台。

实现思路:原来我的思路是不使用插件的上传按钮,而自己通过js将插件里面的多文件与表单一起提交,但是到后台只能获取到最后一个文件,我不是文件数组。我查了很多办法好像都没办法,后来改变思路:还是自己用js触发提交表单,只是先将表单其他数据传到后台保存返回数据库id,然后通过$(‘#add_bachPic’).fileinput(‘upload’);触发提交文件上传,并传递额外参数id,最后根据传递的额外参数,修改相应的实体类中的字段,将上传的图片的名字,修改并保存数据库的pictureurl字段中!

 一、先来说说bootstrap-fileinput .js

这个插件主页地址是:http://plugins.krajee.com/file-input,可以从这里看到很多Demo的代码展示:http://plugins.krajee.com/file-basic-usage-demo

这是一个增强的 HTML5 文件输入控件,是一个 Bootstrap 3.x 的扩展,实现文件上传预览,多文件上传等功能。

一般情况下,我们需要引入下面两个文件,插件才能正常使用:

bootstrap-fileinput/css/fileinput.min.css

bootstrap-fileinput/js/fileinput.min.js

简单的界面效果如下所示,和众多上传文件控件一样,可以接受各种类型的文件。当然,我们也可以指定具体接受的文件类型等功能。

简单的界面效果如下所示,和众多上传文件控件一样,可以接受各种类型的文件。当然,我们也可以指定具体接受的文件类型等功能。

扒一扒使用boostrap-fileinput上传插件遇到的坑,Bootstrap-fileinput上传插件的使用详解,「建议收藏」

如果需要考虑中文化,那么还需要引入文件:

bootstrap-fileinput/js/fileinput_locale_zh.js

这样基于MVC的Bundles集合,我们把它们所需要的文件加入到集合里面即可。

            //添加对bootstrap-fileinput控件的支持
 css_metronic.Include("~/Content/MyPlugins/bootstrap-fileinput/css/fileinput.min.css"); js_metronic.Include("~/Content/MyPlugins/bootstrap-fileinput/js/fileinput.min.js");
js_metronic.Include("~/Content/MyPlugins/bootstrap-fileinput/js/fileinput_locale_zh.js");

bootstrap-fileinput的各个js下载地址:http://download.csdn.net/detail/zlb_lover/9917925
本项目实现的效果如下:

扒一扒使用boostrap-fileinput上传插件遇到的坑,Bootstrap-fileinput上传插件的使用详解,「建议收藏」



实现的代码如下
1、jsp中 添加上传的input 框。
<input id="fish_file" name="fish_file" type="file" multiple  class="file"  data-show-upload="false" data-show-caption="true">

2 js,中,(本项目主要涉及两个js,分别是animal.js 和upload.js)

在animal.js中主要实现打开上传的模态框,

关键方法如下:代码中注释为红色部分,较为关键,具体作用看注释。

$("#btn_insect_add").click(function () {
    $(".insect").val("") //根据类名移除上一次增昆虫名录时的填写的所有的内容。
    /** * 以下代码是为了移除 bootstrap fileinput上传插件 上一次选择的文件,当再次打开时,清空上次选择的文件, * 实现的思路是:每次打开模态框时先清楚div中的input 文件上传框,然后再在相应的div中动态添加,文件上传框,并调用初始化的方法。 * */  /
    $("#div_insect_file").empty();
    var element='<input id="insect_file" name="insect_file" type="file" multiple  class="file insect"  data-show-upload="false" data-show-caption="true">';
    $("#div_insect_file").append(element);
    insectFileInput("insect_file","/SongshanManagement/animalcontent/addinsectPicture.html");
    openModal("insectAddDetail");
});

2、upload的js中,实现的实路是,先点击提交,通过ajax提交表单的信息,在提交成功的success响应方法中,触发图片上传的方法。

在bootstrap-fileinput的使用时,首先要初始化,方法如下:

$(function () {
    fishFileInput("fish_file","/SongshanManagement/animalcontent/addfishPicture.html");
}

//初始化鱼类名录信息上传的fileinput控件
function fishFileInput(ctrlName, uploadUrl) {
    $("#fish_file").fileinput({
        language: 'zh', //设置语言
        uploadUrl: '/SongshanManagement/animalcontent/addFishPicture.html', //上传的地址
        enctype: 'multipart/form-data',
        allowedFileExtensions : ['jpg', 'png','bmp','jpeg'],//接收的文件后缀
        showUpload: false, //是否显示上传按钮
        showPreview: true,              //展前预览
        showCaption: false,//是否显示标题
        maxFileSize : 10000,//上传文件最大的尺寸
        maxFilesNum : 10,//
        dropZoneEnabled: false,//是否显示拖拽区域
        browseClass: "btn btn-primary", //按钮样式
        uploadAsync: false,
        layoutTemplates :{
            // actionDelete:'', //去除上传预览的缩略图中的删除图标
            actionUpload:'',//去除上传预览缩略图中的上传图片;
            actionZoom:''   //去除上传预览缩略图中的查看详情预览的缩略图标。
        },
        uploadExtraData:function (previewId, index) {
            //向后台传递id作为额外参数,是后台可以根据id修改对应的图片地址。
            var obj = {};
            obj.id = fishId;
            return obj;
        }
    }).on("filebatchuploadsuccess", function(event, data) {
        if(data.response){
            closeModal('fishAddDetail') 关闭模态框。
            $("#bootstraptable_fishcontent").bootstrapTable("refresh");
        }
    }).on('fileerror', function(event, data, msg) {  //一个文件上传失败
        console.log('文件上传失败!'+msg);
    });
}

3.提交按钮的点击事件。

//新增鱼类名录模态框的提交按钮点击事件。
$("#btn_add_fish").click(function () {
    var picturename="";//获取上传的文件的后缀名,如果不是jpg,或者png的话不出发上传,弹出提示,表单里面的其他内容也不上传。
    picturename=$("#fish_file").val().substring($("#fish_file").val().indexOf('.'),$("#fish_file").val().length).toUpperCase();
    /*当上传的文件的格式是.png .jpg .PNG .JPG时 先将表单内的除图片以外的东西提交到后天,然后在触发插件,将图片上传,保存。
     */
    if (picturename ==".JPG"  || picturename ==".PNG" || picturename =="" || picturename==".BMP"|| picturename==".JPEG") {
        $.ajax({
            type: 'post',
            url: '/SongshanManagement/animalcontent/addfishcontent.html',
            data: $("#form_addfishContent").serialize(),
            success: function (data) {
                fishId = data;
                //不上传图片时,不触发bootstrap 上传插件的初始化方法。仅将表单里面的(除图片以外的)内容提交,
                if ($("#fish_file").val() != "") {
                    $('#fish_file').fileinput('upload'); //触发插件开始上传。
                }
                else {
                    closeModal('fishAddDetail');
                    $("#bootstraptable_fishcontent").bootstrapTable("refresh");
                }

            }
        });
    }else {
        alert("只能上传.jpg,.png,.PNG,.JPG,bmp,jpeg格式的图片");
        return false;
    }

});

后台方法。如下。

/**  *  * 先上传鱼类表单里面的内容 ,然后在上传图片,根据保存的主键的id,修改对应的pictureurl;  * @param fishContent  * @return  * @throws Exception  */  @RequestMapping(value="/addfishcontent.html")
@ResponseBody
public int addFishContent(FishContent fishContent) throws Exception {
    int a=this.animalContentImp.addFishContent(fishContent);
    return a;
}

/**  * 在上一步,添加完鱼类名录的其他信息后(上次添加植物名录,没有填写对应图片的pictureurl)上传完图片后,根据id修改刚才添加的名录的pictureurl  * @param id  * @param request  * @param fish_file  * @return  */ @RequestMapping(value="/addFishPicture.html", method=RequestMethod.POST)
@ResponseBody
public String addFishPic(int id, MultipartHttpServletRequest request, @RequestParam MultipartFile[] fish_file){
    try{

        if(fish_file!=null&& fish_file.length>0){
            //组合image名称,“#隔开”
            String pictureurl =""; //用来接收拼接各个图片的名字,并保存到数据库。
            for(int i=0;i<fish_file.length;i++){
                if(!fish_file[i].isEmpty()){
                    pictureurl=pictureurl+UploadFileUtils.uploadImage(request,fish_file[i]);
                }
            }
            //上传成功
            if(pictureurl!=null&&pictureurl.length()>0){
                System.out.println("上传成功!"+pictureurl); //
                this.animalContentImp.updateFishPicture(id,pictureurl);
            }else {
                System.out.println("上传失败!");
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "0";
}

//保存上传的文件的UploadFileUtils工具类如下:

public class UploadFileUtils {
    /**  * 将上传的图片保存到本地f盘的工具类。  * 原名称  * @param request 请求  * @param file 文件  * @param  * @return 完整文件路径  */  public static String uploadImage(MultipartHttpServletRequest request, MultipartFile file) {
        String rootUrl="F"+"://"+"plantpictureurl/";//根目录,
        //上传
        try {
            String[] typeImg={
 
 "png","jpg"};

            if(file!=null){
                String origName=file.getOriginalFilename();// 文件原名称
                System.out.println("上传的文件原名称:"+origName);
                        //存放图片文件的路径
                        String fileSrc="";
                        try{
                            File uploadedFile = new File(rootUrl+"//"+origName);
                            System.out.println("upload==="+rootUrl);
                            OutputStream os = new FileOutputStream(uploadedFile);
                            InputStream is =file.getInputStream();
                            byte buf[] = new byte[1024];//可以修改 1024 以提高读取速度
                            int length = 0;
                            while( (length = is.read(buf)) > 0 ){
                                os.write(buf, 0, length);
                            }
                            //关闭流
                            os.flush();
                            is.close();
                            os.close();
                            fileSrc=origName+"#";
                            System.out.println("保存成功!路径:"+rootUrl+"/"+origName);
                        }catch(Exception e){
                            e.printStackTrace();
                        }
                        return fileSrc;
                    }
            return null;
        }catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

上传的一些细节:例如去除预览缩略图上面的三个图片

扒一扒使用boostrap-fileinput上传插件遇到的坑,Bootstrap-fileinput上传插件的使用详解,「建议收藏」

扒一扒使用boostrap-fileinput上传插件遇到的坑,Bootstrap-fileinput上传插件的使用详解,「建议收藏」

实现代码。

扒一扒使用boostrap-fileinput上传插件遇到的坑,Bootstrap-fileinput上传插件的使用详解,「建议收藏」

搬砖不容易,喜欢就赏点。

                                                 扒一扒使用boostrap-fileinput上传插件遇到的坑,Bootstrap-fileinput上传插件的使用详解,「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133936.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)
blank

相关推荐

  • css圆角边框怎么设置颜色_word图片怎么设置圆角大小

    css圆角边框怎么设置颜色_word图片怎么设置圆角大小总结起来很简单,设置css圆角边框就是设置border-radius的值,设置的数字不同,圆角的大小也不同。通过设计css圆角边框,我们就不需要再用带框的背景图片,这不仅让页面设计更加简单,同时也有利于提升页面加载的速度。本文给大家简单介绍下css圆角边框怎么设置,大家可以参考,也可以直接拿过去使用,当然要修改下具体的参数。上面的css代码,大家可以直接拿去用,至于像15px、50px等这些数据,大家可以通过测试看看具体需要多大数字,这里给出的数字只是参考。圆角边框的最基本用法就是设置四个相同弧度的圆角。.

    2022年10月23日
  • SpringCloud—-如何解决灾难性雪崩效应

    SpringCloud—-如何解决灾难性雪崩效应

    2020年11月12日
  • vue生成二维码_html生成二维码

    vue生成二维码_html生成二维码目录qrcodejs2vue-qrqrcodejs2下载qrcodejs2cnpmi-Sqrcodejs2使用<template><spanref=”qrCodeUrl”></span></template><script>importQRCodefrom”qrcodejs2″;exportdefault{data(){return{};},mo

  • MATLAB 循环语句_for循环matlab

    MATLAB 循环语句_for循环matlabMatlab的循环语法1、用循环方式实现从1到999的累加2、(1)、for循环方式实现: %% %初始化sum的值为0 sum=0; %从1开始遍历到999 fori=1:999 %对遍历的每一个元素进行累加 sum=sum+i; end %在控制台显示结果 disp(sum); (…

  • 什么是JavaBean?它的作用是什么?

    什么是JavaBean?它的作用是什么?定义:JavaBean是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java类可以通过自省机制(反射机制)发现和操作这些JavaBean的属性。JavaBean可分为两种:一种是有…

  • outputstreamwriter用法_floating power object

    outputstreamwriter用法_floating power object写这个类的原因,网上有很多介绍这两个类的,InputStreamReader类的使用,没有任何异议,而OutputStreamWriter,看了网的帖子和博客说的都不是很清楚,所以小皮虾好好研究了一下OutputStreamWriter类,所以下面的总结有不对之处,欢迎指正!api类中解释:InputStreamReader是字节流通向字符流的桥梁,将字节流转换为字符流

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号