• vue+weui+FormData+XMLHttpRequest 实现图片上传功能


    首先是样式:https://weui.io/#uploader

    在weui示例中可以看到是用以下方法进行选择图片

    <input id="uploaderInput" class="weui-uploader__input" type="file" accept="image/*" multiple/>
    

      

     $uploaderInput = $("#uploaderInput");
     $uploaderInput.on("change", function(e){
                var src, url = window.URL || window.webkitURL || window.mozURL, files = e.target.files;
                for (var i = 0, len = files.length; i < len; ++i) {
                    var file = files[i];
    
                    if (url) {
                        src = url.createObjectURL(file);
                    } else {
                        src = e.target.result;
                    }
    
                    $uploaderFiles.append($(tmpl.replace('#url#', src)));
                }
            });
    

     由于俺们用的vue,所以改造一下子

    <input @change="uploadInpuChange($event)" class="weui-uploader__input" type="file" accept="image/*" multiple=""/>
    

     在相关vue实例中加入如下方法

    uploadInpuChange: function (e) {
                let src, url = window.URL || window.webkitURL || window.mozURL, files = e.target.files, self = this;
                for (var i = 0, len = files.length; i < len; ++i) {
                    var file = files[i];
                    if (url) {
                        src = url.createObjectURL(file);
                    } else {
                        src = e.target.result;
                    } 
              self.imgs.push({ url: "background-image: url(" + src + ")"});//这个src为一种。。啥类型来着,自个F12瞅瞅 //添加到数组 filesAry.push({ file: file }) }; }

     最后是展示

    <li  v-for="img in imgs" class="weui-uploader__file a-fadein" v-bind:style="img.url"></li>
    

     然后捏,就可以在此基础上做任何扩展操作啦,例如限制图片类型,数量鸭

    最后是提交图片,先全添加进formdata中

     let formdata = new FormData();
        filesAry.forEach(function (obj) {
            if (obj.file != null) {
                formdata.append('files', obj.file);//原项目一般回附带其他参数类型然后遍历做相关判断再添加
            }
        })
    

      

    然后使用XMLHttpRequest对象进行提交

    let xhr = new XMLHttpRequest();
        xhr.open('POST', location.href, true);
        xhr.send(formdata);
        xhr.onload = function (event) {
            if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {
                console.log(xhr.responseText);
             //okay
            }
            else {
            //no okay
            }
        };
    

      

    我采取的是一次性全部提交,也可以依照这个改造为一个个提交

  • 相关阅读:
    在HTML中使用JavaScript
    小强的HTML5移动开发之路(49)——HTML5开发神器HBuilder
    小强的HTML5移动开发之路(48)——(小练习)新闻订阅系统【1】
    QT学习记录之控件布局
    QT学习记录之理解信号槽机制
    小强的HTML5移动开发之路(47)——jquery mobile基本的页面框架
    Linux下MySQL备份以及crontab定时备份
    Linux管理日记(三)
    小强的HTML5移动开发之路(46)——汇率计算器【2】
    kindeditor实现ctrl+v粘贴word图片并上传
  • 原文地址:https://www.cnblogs.com/ncellit/p/10675154.html
Copyright © 2020-2023  润新知