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 } }; |
我采取的是一次性全部提交,也可以依照这个改造为一个个提交
分类:
javascript
, 前端
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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语句:使用策略模式优化代码结构