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

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

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

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

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$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,所以改造一下子

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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;
                } <br>          self.imgs.push({ url: "background-image: url(" + src + ")"});//这个src为一种。。啥类型来着,自个F12瞅瞅
                //添加到数组
                filesAry.push({
                    file: file
                })
            };
        }

 最后是展示

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

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

 

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

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

  

然后使用XMLHttpRequest对象进行提交

1
2
3
4
5
6
7
8
9
10
11
12
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
        }
    };

  

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

 

posted @   君宁天下  阅读(1137)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
野生程序员真的是太难了,一刻也不敢停止学习
点击右上角即可分享
微信分享提示