两种预览上传图片方式(无限上传)

1, 前言

市场上很多产品都有上传图片的功能,不仅仅如此,还有裁剪图片上传的功能,类似微信公众账号,我不会和你们说,我把微信公众账号网站代码扒下来研究了一遍。

前段时间,公司内部有个项目,需要上传图片还有录音上传,而且是无限上传的那种,我就写了下,我的做法可能不是最好的,但是,目前是我想到的最好的方法。

2, 通过form表单上传多个图片

我最初的想法是为了兼容IE浏览器就使用form表单的方式来上传表单,但是在此我们要解决三个问题:

  • 1,如何解决UI给的上传按钮是图片的问题?在IE中必须鼠标点击的对象是Input[type="file"]
    控件才能触发 change事件

  • 2,如何解决无限上传?

  • 3,如何提前预览图片?

    我的解决办法:

  • 1, 把Input[type="file"]的文件做定位,并覆盖在图片按钮上,给其高度和宽度,并且透明度为 0

    html:

              <button>预览图片上传</button>
              <input type="file" accept="image/png,image/gif"  class="input-file-selectorImg" name="uploadPoster[]">

    css:

              .btn-warp input[type='file']{
                  opacity: 0;
                  position: absolute;
                  left : 0px;
              }
  • 2, 无限上传,我把当前触发过 change 事件的Input[type="file"]控件,给插入到隐藏的 div 中,并生成一个新的控件 ,到以前的位置上。

              var cloneSlef = function( target ){
                   target.append( this )
              }
    
              var getInputHtml = function(){
    
                  return '<input type="file" accept="image/png,image/gif" class="input-file-selectorImg" name="uploadPoster[]">'
              }
    
              var createInputFile = function( ){
    
                  var inputHtml = getInputHtml()
                  $(this).before( inputHtml )
              }
  • 3, 上传之前预览图片,我们要借用 window.URL.createObjectURL() 方法,把 Input[type="file"] 获得的 file 对象, 转成 blob 数据。

              dataUrl = windowUrl.createObjectURL( fileObj.files[0] );

    之后,把得到的数据给 img 对象,最后,把img对象插入到指定的目标。

              var imgObj = $('<img>');
    
              imgObj.attr('src', dataUrl);
    
              return imgObj
3, 模拟form表单对象上传图片

使用 Form 对象来模拟表单,只需要把上面的第二个问题的解决办法修改下:

把上传之前得到的 图片 Blob 数据保存,等到使用的时候,append() 到表单对象中。

                var appendImgDataToFormData = function( imgDatas ){
                    var i = 0,
                        imgData;
                    for( ; imgData = imgDatas[i++]; ) {
                        this.add( 'picture[]', imgData );
                    }
    
                }

不过,此方法没经过测试,不知道是否能上传多个

文献

http://www.zhangxinxu.com/wordpress/2013/10/understand-domstring-document-formdata-blob-file-arraybuffer/

http://www.ruanyifeng.com/blog/2012/08/file_upload.html

https://developer.mozilla.org/en-US/docs/Web/API/FormData

https://github.com/mattdiamond/Recorderjs

转载于:https://www.cnblogs.com/zhiyuan-2011/articles/5138807.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值