web项目使用bootstrap fileinput插件无法在IE预览PDF文件

项目场景:

web项目需要上传图片,包括png,jpeg,及tiff还有pdf。
使用的是bootstrap fileinput 插件;


问题描述:

选择pdf文件之后或者上传之后回显,在火狐,谷歌展示正常,但是在IE浏览器中展示为空白。

使用bootstrap fileinput插件,IE选择pdf文件之后,展示空白


原因分析:

IE需要安装adobe插件???
确实,我在安装了adobe之后,pdf能够显示,但是还是有一些问题:

  1. 在选择图片的时候,会提示我权限不够,(选择照片的回显有问题,上传之后能够回显)搜索了半天还是不能解决该问题;
    安装adobe之后,选择pdf文件的提示
    点击确定之后

  2. 上传之后,缩略图预览没问题,但是放大会有问题。
    缩略图:
    缩略图预览
    点击放大:
    点击放大查看
    所以最后还是放弃了去设置IE,直接从代码上解决问题。


解决方案:

插件pdf.js。下载链接

pdf.js使用起来特别简单,下载相关文件,重点是pdf.js还有一个viewer.html。
在自己的html代码中引入pdf.js即可。其他问题小伙伴可以自行百度,我在这里就不详细介绍了。

那么bootstrap fileinput插件怎么把pdf.js嵌进来呢。

首先说一下,我们的项目是上传文件到minio文件服务器的。
其次,fileinput处理pdf是分两种情况的:
1.在选择照片的时候之后,未上传之前,预览预加载的图片;
2.上传之后,预览minio文件服务器文件;
两种情况都可在fileinput.js中看到是怎么预览的。下边也会提到。

接下来给大家展示我的才艺了:
其实挺简单的。
fileinput插件提供了previewTemplates对象,重写该对象对pdf类型的文件处理方式就好了。
1.处理选择照片pdf的预览;

function initFileInput(initialPreview,initialPreviewConfig) {
$('#txt_file').fileinput({
            language: 'zh', //设置语言
            uploadUrl: "", //上传的地址
            //deleteUrl: '',//批量删除的url
            //deleteExtraData: {},//删除的参数
            allowedFileExtensions: ['jpg', 'tiff', 'tif','gif', 'png','pdf'],//接收的文件后缀
            uploadExtraData:{"recid": recid},//参数
            dropZoneEnabled: true,//是否显示拖拽区域
            dropZoneTitle: '无原文<br/>可以将图片拖放到这里 …<br/>支持多文件上传',
            uploadAsync: true, //默认异步上传
            showUpload: false, //是否显示上传按钮
            showRemove : false, //显示移除按钮
            showPreview : true, //是否显示预览
            purifyHtml: true, // 这是默认情况下为预览净化HTML数据
            showCaption: true,//是否显示标题
            overwriteInitial: false, //不覆盖已存在的图片
            browseClass: "btn btn-primary", //按钮样式
            //dropZoneEnabled: true,//是否显示拖拽区域
            //minImageWidth: 100, //图片的最小宽度
            //minImageHeight: 100,//图片的最小高度
            //maxImageWidth: 1000,//图片的最大宽度
            //maxImageHeight: 1000,//图片的最大高度
            //maxFileSize: 0,//单位为kb,如果为0表示不限制文件大小
            //minFileCount: 0,
            //maxFileCount: 10, //表示允许同时上传的最大文件个数
            //enctype: 'multipart/form-data',
            //validateInitialCount:true,
            previewFileIcon: "<i class='glyphicon glyphicon-king'></i>",
            //msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!",
            //initialPreviewFileType: 'image', // `image`是默认值,可以在下面的配置中覆盖
            initialPreview: initialPreview,
            initialPreviewConfig: initialPreviewConfig,
            initialPreviewAsData: true, // 特别重要
            previewTemplates:{
				pdf: '<div class="file-preview-frame{frameClass}" id="{previewId}" data-fileindex="{fileindex}" data-template="{template}">\n' +
        			 '   <div class="kv-file-content">' +
        			 //'       <embed class="kv-preview-data" src="{data}" width="{width}" height="{height}" type="application/pdf">\n',
        			 '		   <iframe src="/modules/pdfPreView/generic/web/viewer.html?file={data}" width="100%" height="100%" style="border: 0;overflow: hidden;" scrolling="no"></iframe>'+
        			 '   </div>\n' +
        			 '   {footer}\n' +
        			 '</div>',
			}
            fileActionSettings:{
				showRemove: false,
                showUpload: false,
                showDownload: false,
                showZoom: true,
            	showDrag: false
			},
            layoutTemplates:{
            	actionUpload:'',//去除上传预览缩略图中的上传图片
                //actionZoom:'',   //去除上传预览缩略图中的查看详情预览的缩略图标
                actionDownload:'', //去除上传预览缩略图中的下载图标
                actionDelete:'', //去除上传预览的缩略图中的删除图标
                actionDrag:''//去除缩略图中的拖拽图标
				},//对象用于渲染布局的每个部分的模板配置。您可以设置以下模板来控制窗口小部件布局.eg:去除上传图标
    }).on('filepreupload', function(event, data, previewId, index) {     //上传中
            var form = data.form, files = data.files, extra = data.extra,
                response = data.response, reader = data.reader;
            console.log('文件正在上传');
        }).on("fileuploaded", function (event, data, previewId, index) {    //一个文件上传成功
            var response = data.response;
            //alert(response.filePath);
            console.log('文件上传成功!'+data.id);
            //在上传成功事件中将服务器返回的所需数据,添加到该文件对应的div中
            $('#' + previewId).attr('fileid', response.id);
            //$('#' + previewId).attr('deletePath', response.deletePath);

        }).on('fileerror', function(event, data, msg) {  //一个文件上传失败
            console.log('文件上传失败!'+data.id);
        }).on('filesuccessremove', function (event, previewId, extra) {//单个文件删除
            //在移除事件里取出所需数据,并执行相应的删除指令
            //delete(($('#' + previewId).attr('fileid'));

        })
        }

重点看
初始化时注意的地方
2. 处理回显文件服务器的pdf回显;

从数据库获取到图片的路径,然后封装成对象,放到初始化fileinput的对应函数中去。

function getFileData(){
       	$.ajax({
            url: '',//访问后台的url
            data: {
                //参数
            },
            type: 'post',
            dataType: 'json',
            success: function (data) {
                //封装回显的图片
                if("1"==data.flag){
                    if(data.data){
                        //获取照片的路径封装至数组中
                        var initialPreview = [];
                        var initialPreviewConfig = [];
                        for(var i=0;i<data.data.length;i++){
                            if(data.data[i].affixSuffix.indexOf('pdf')>-1){
                                //'<img src="http://lorempixel.com/800/460/nature/1" class="kv-preview-data krajee-init-preview file-preview-image">'
                                initialPreview.push('<iframe src="/modules/pdfPreView/generic/web/viewer.html?file='+文件在服务器的访问路径+'" width="100%" height="100%" style="border: 0;overflow: hidden;" scrolling="no"></iframe>');
                                initialPreviewConfig.push({
                                    previewAsData: false,
                                    type:'pdf',//文件类型(后缀)
                                    caption:data.data[i].affixName,/*文件标题*/
                                    size:data.data[i].affixSize,
                                    url:'',/* 预览中的删除按钮的url*/
                                    key:data.data[i].id,/* 删除时ajax携带的参数*/
                                    downloadUrl: '',   //这个是显示下载按钮的关键,如果没有此属性,下载按钮是不会显示的。
                                    extra: {ids: data.data[i].id}  /*删除文件携带的参数*/
                                });
                            }
                        }
                        initFileInput(initialPreview,initialPreviewConfig);
                    }else{
                        initFileInput();
                    }
                }

            },
            error: function (err) {
                layer.msg('获取档案照片失败,请刷新重试!',{icon: 2,time:1000});

            }
        });
    }

重点看:
加载已经上传的图片的参数封装

至于为什么设置成false,大家看下bootstrap fileinput 帮助文档的高级预览

这样设置之后,之前的问题就能够完美解决了。至于成功的截图我就不贴了,自己去感受吧。

刚开始写文档,有点糙,大家有问题随时问我就好了。希望能对大家有用。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值