vue2+vant2+Laravel7 实现多图上传到七牛云

后端接口

1、路由,在 routes/api.php

Route::resource('photos', 'PhotoController')->only('store');

2、创建对应控制器

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;class PhotoController extends Controller
{/**** 上传图片* @param Request $request*/public function store(Request $request){if ($request->hasFile('file') && $request->file('file')->isValid()) {$path = $request->file->store('public/images');//上传到七牛云$file_path = storage_path('app/') . $path;qiniu_upload($file_path);return response()->json( 'https://image.xxx.com/' . basename($file_path));}}
}

3、定义辅助函数 qiniu.php

<?php
// 引入鉴权类
use Qiniu\Auth;
// 引入上传类
use Qiniu\Storage\UploadManager;function qiniu_upload($filePath)
{$accessKey = "fAoxxxxxxxxxxxxxxxxxxxxxxxxx";$secretKey = "dkCxxxxxxxxxxxxxxxxxxxxxxxxx";$bucket = "xxxxx";$auth = new Auth($accessKey, $secretKey);$token = $auth->uploadToken($bucket);// 上传到七牛后保存的文件名$key = basename($filePath);// 初始化 UploadManager 对象并进行文件的上传。$uploadMgr = new UploadManager();// 调用 UploadManager 的 putFile 方法进行文件的上传。$uploadMgr->putFile($token, $key, $filePath);unlink($filePath);
}

这里需要安装七牛云的包,不会用的可以看七牛官网或在评论区给我留言。

前端

1、创建 vue2 项目,此步骤省略,自行完成。
2、安装 axiosvue2-toastVant2 前端 UI 框架,

npm install axiosnpm install toast2-vue -Snpm i vant@latest-v2 -S

3、在 main.js 中,全部代码如下,供参考:

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import Vant from 'vant'
import 'vant/lib/index.css'
import axios from 'axios'
import 'vue2-toast/lib/toast.css'
import Toast from 'vue2-toast'axios.defaults.baseURL = 'https://xxx.xxx.com/'
Vue.prototype.$http = axios
Vue.use(Toast)
Vue.use(Vant)
Vue.config.productionTip = falsenew Vue({router,render: h => h(App)
}).$mount('#app')

4、在 src/router/index.js 中添加路由,代码如下:

import Vue from 'vue'
import VueRouter from 'vue-router'Vue.use(VueRouter)const routes = [{path: '/',name: 'Home',component: () => import('../views/Home.vue')}
]const router = new VueRouter({routes
})export default router

5、准备视图,在 src/views/Home.vue 中,全部代码如下:

<template><div class="home"><h2 class="van-doc-title" style="text-align: center">督查记录表</h2><van-form @submit="onSubmit"><h2 class="van-doc-demo-block__title" style="background-color: #f7f8fa;">基础信息</h2><van-fieldv-model="form.name"label="督查员:"placeholder="请输入姓名":rules="[{ required: true, message: '请填写姓名' }]"/><van-fieldreadonlyclickablename="picker":value="form.department"label="督查场部:"placeholder="点击选择"@click="showPicker = true"/><van-popup v-model="showPicker" position="bottom"><van-pickershow-toolbar:columns="stages"@confirm="onConfirm"@cancel="showPicker = false"/></van-popup><van-fieldv-model="form.address"label="督查地点:"placeholder="请输入地点名称":rules="[{ required: true, message: '请填写地点名称' }]"/><van-fieldv-model="form.head"label="岗位负责人:"placeholder="请输入负责人姓名":rules="[{ required: true, message: '请填写负责人姓名' }]"/><h2 class="van-doc-demo-block__title" style="background-color: #f7f8fa;">检查项目</h2><van-field name="radio" label="卫生情况:"><template #input><van-radio-group v-model="form.health" direction="horizontal"><van-radio name="1">合格</van-radio><van-radio name="0">不合格</van-radio></van-radio-group></template></van-field><van-field name="uploader" label="附图:"><template #input><van-uploader v-model="form.imageList" multiple :max-count="2":after-read="afterRead"/></template></van-field><van-fieldv-model="form.message"rows="2"autosizelabel="留言:"type="textarea"maxlength="50"placeholder="请输入留言"show-word-limit/><div style="display: flex;align-items: center;"><h2 class="van-doc-demo-block__title"style="font-size: 14px;color: #646566;font-weight: normal;padding-right: 15px">评分:</h2><van-ratev-model="form.rate":size="25"color="#ffd21e"void-icon="star"void-color="#eee"count="10"@change="onChange"/></div><div style="margin: 50px 16px 16px 16px;"><van-button round block type="info" native-type="submit">提交</van-button></div></van-form></div>
</template><script>
/* eslint-disable */
export default {data () {return {stages: ['总部', '杨湖场', '株山场', '天子山场', '品格饲料厂'],showPicker: false,form: {name: '',department: '',address: '',head: '',health: '1',imageList: [],message: '',rate: 0}}},methods: {// 选择框onConfirm (value) {this.form.department = valuethis.showPicker = false},// 点击评分onChange (value) {this.form.rate = value},// 点击上传afterRead (file) {file.status = 'uploading'file.message = '上传中...'const formData = new FormData()formData.append('file', file.file)this.uploadImage(formData).then(response => {// 假设返回的response.data是图片的URLfile.content = response.datafile.status = 'done'file.message = '上传成功'this.form.imageList = [...this.form.imageList] // 通过替换imageList数组的内容来更新视图})},// 图片上传至后端服务器uploadImage (formData) {const uploadUrl = 'https://xxx.xxx.com/api/photos'return this.$http.post(uploadUrl, formData, {headers: {'Content-Type': 'multipart/form-data'}})},// 表单提交async onSubmit () {const res = await this.$http.post('api/check', this.form)if (res.data.status === true) {this.$toast.center(res.data.message)this.form = {}this.form.health = '1'}}}
}
</script><style>
.van-doc-demo-block__title {padding: 10px 16px;color: rgba(69, 90, 100, 0.6);font-weight: normal;font-size: 14px;line-height: 16px;
}.van-cell {padding: 15px 16px;
}.van-button--info {background-color: #f4645f;border: 1px solid #f4645f;
}.van-radio__icon--checked .van-icon {background-color: #f4645f;border-color: #f4645f;
}
</style>

上述代码其实是实现一个 form 表单的提交,里面有个比较重要的功能,就是多图上传的问题。最终的效果如下图:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/538973.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何实现接口

类实现接口 用关键字implements声明自己实现一个或 多个接口 实现 多个接口&#xff0c;用 逗号分隔开 重写接口中的方法 要求&#xff1a;类实现某个接口&#xff0c;类必须重写该接口的所有方法。 重写规则&#xff1a; 去掉public abstact修饰符 给出方法体&#xff08;具…

终于找到方法!多个微信同时登录一台电脑!

大家都知道&#xff0c;在手机上登录多个微信号&#xff0c;有很多工具可以实现&#xff0c;但是要想在电脑上同时登录多个微信账号&#xff0c;也是有方法可以实现的&#xff0c;下面就一起来看看吧&#xff01; 通过使用微信管理系统&#xff0c;能够让我们实现多个微信账号…

【JavaScript】JavaScript 简介 ④ ( 解释型语言 和 编译型语言 | 计算机程序本质 | 编译器 和 解释器 )

文章目录 一、 解释型语言 和 编译型语言1、计算机程序本质2、编译器 和 解释器3、编译器 分析4、解释器 分析 一、 解释型语言 和 编译型语言 1、计算机程序本质 计算机 的 程序 是在 CPU 上执行的 , CPU 上执行的只有匹配该 CPU 的机器码指令 , 不同类型的 CPU 执行的 机器码…

Milvus向量数据库检索

官方文档&#xff1a;https://milvus.io/docs/search.md   本节介绍如何使用 Milvus 搜索实体。   Milvus 中的向量相似度搜索会计算查询向量与具有指定相似度度量的集合中的向量之间的距离&#xff0c;并返回最相似的结果。您可以通过指定过滤标量字段或主键字段的布尔表达…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)上篇

提供具有网页显示能力的Web组件&#xff0c;ohos.web.webview提供web控制能力。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。示例效果请以真机运行为准&#xff0c;当前IDE预览器不支持。 需要权…

【动态规划】代码随想录算法训练营第五十三天 |1143.最长公共子序列, 1035.不相交的线 ,53. 最大子序和 动态规划 (待补充)

1143.最长公共子序列 1、题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个…

基于Python的中医药知识问答系统设计与实现

[简介] 这篇文章主要介绍了基于Python的中医药知识问答系统的设计与实现。该系统利用Python编程语言&#xff0c;结合中医药领域的知识和技术&#xff0c;实现了一个功能强大的问答系统。文章首先介绍了中医药知识的特点和传统问答系统的局限性&#xff0c;然后提出了设计思路…

阿里通义灵码全面公测,来看看它的水平怎么样?

作者&#xff1a;颖欣 人工智能作为新一轮的技术革命&#xff0c;已经开始渗透到软件开发领域&#xff0c;改变着传统的编码模式。如何利用 AI 技术提升软件开发的效率和质量&#xff0c;成为各家研究的重点。去年 10 月阿里云正式发布的通义灵码 - 智能编码助手&#xff0c;如…

新生宿舍管理系统|基于springboot框架+ Mysql+Java+B/S架构的新生宿舍管理系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 学生功能模块 管理员功能 系统功能设计 数据库E-R图设计 lunwen参考 摘要 研究目的 开发环境 项目部…

【Vue2】slot 插槽全家桶

插槽-默认插槽 插槽的基本语法 组件内需要定制的结构部分&#xff0c;改用<slot></slot>占位使用组件时, <MyDialog></MyDialog>标签内部, 传入结构替换slot给插槽传入内容时&#xff0c;可以传入纯文本、html标签、组件 插槽-默认值 封装组件时&am…

在dpvs上实现ICMP的源进源出

目录 1. 缘起2. 源码分析3. 让ICMP也走源进源出1. 缘起 在网络通信中,当一个请求报文从源主机到达目标主机,并经过中间路由器或交换机进行转发时,请求报文进入主机A的路径和响应报文离开主机A的路径可能不同。这种情况下,就会出现所谓的三角路径问题。如下图: 具体来说,…

心理核算的原则和依据

不论你的收入来源是工资、赌博所得、六合彩中奖或者其他&#xff0c;你都应该将增加的收入花在同样的物品上。在这个意义上&#xff0c;钱是无差异的。