vue项目下自己封装上传文件功能
axios因为统一封装过,通过这个库上传文件也行,但是封装的地方修改不太容易,遂另起炉灶。
看代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | // utils/uploadFile.js const baseUrlConfig = { 'development' : 'http://localhost:8089/v1' , 'production' : 'http://47.96.112.186/v1' } const env = process.env.NODE_ENV //单个上传文件,接受一个获取到的文件参数 function upload(path, file) { return new Promise((resolve, reject) => { if (!file) { return alert( "你还未选择文件" ); } var formData = new FormData(); // 接口只接受一个文件,取第一个文件即可 formData.append( "image" , file); // 我们的接口需要这2个参数 formData.append( "siteId" , 1); formData.append( "session" , localStorage.getItem( "sessionId" )); // 1. 创建 xhr 对象 var xhr = new XMLHttpRequest(); // 5. 监听事件 xhr.onreadystatechange = function () { console.log(234); if (xhr.readyState === 4 && xhr.status === 200) { var result = JSON.parse(xhr.responseText); console.log(result); if (result.status == 0) { // 上传成功:显示图片 resolve(result.data) } else { // 上传失败 reject(result.reason) } } }; // 2. 调用 open 函数 xhr.open( "POST" , baseUrlConfig[env] + path); // 4. 调用 send 函数 xhr.send(formData); }) } export default upload; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <template> <a-card> <a-space class = "operator" >每天上传的图片不要超过5张</a-space> <div class = "box" > <!-- 1. 文件选择框 --> <input type= "file" id= "file" /> <!-- 2. 上传文件的按钮 --> <button id= "btnUpload" @click= "btnUpload" >上传文件</button> <div class = "img-box" v- if = "imgUrl" > <p>图片地址:{{ imgUrl }}</p> <!-- 3. img 标签,来显示上传成功以后的图片 --> <img :src= "imgUrl" alt= "等待上传图片" id= "img" width= "800" /> </div> </div> </a-card> </template> <script> import dateFormat from "@/utils/dateFormat.js" ; import upload from "@/utils/uploadFile.js" ; export default { data() { return { imgUrl: "" , }; }, filters: { dateFormat(value) { return dateFormat(value, "yyyy-MM-dd hh:mm:ss" ); }, }, created() {}, activated() {}, mounted() {}, methods: { btnUpload() { let file = document.querySelector( "#file" ).files[0]; upload( "/admin/uploadFile" , file).then((res) => { this .imgUrl = res; }); }, }, }; </script> <style lang= "less" scoped> .box { height: 500px; padding: 20px 0 0; .img-box { margin-top: 30px; text-align: center; img { width: auto; height: 400px; } } } </style> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2016-04-14 获取网页数据的例子