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.mzph.cn/news/751577.shtml

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

相关文章

深度学习-基于机器学习的语音情感识别系统的设计

概要 语音识别在现实中有着极为重要的应用&#xff0c;现在语音内容的识别技术已日趋成熟。当前语音情感识别是研究热点之一&#xff0c;它可以帮助AI和人更好地互动、可以帮助心理医生临床诊断、帮助随时随地高效测谎等。本文采用了中科院自动化所的CASIA语料库作为样本&#…

算法---滑动窗口练习-6(找到字符串中所有字母异位词)

找到字符串中所有字母异位词 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;找到字符串中所有字母异位词 2. 讲解算法原理 有效字符个数count更新条件&#xff1a;满足【hash1表&#xff08;遍历s的表&#xff09;中对应元素出现次数<hash2表&am…

【回溯专题】【蓝桥杯备考训练】:n-皇后问题、木棒、飞机降落【未完待续】

目录 1、n-皇后问题&#xff08;回溯模板&#xff09; 2、木棒&#xff08;《算法竞赛进阶指南》、UVA307&#xff09; 3、飞机降落&#xff08;第十四届蓝桥杯省赛C B组&#xff09; 1、n-皇后问题&#xff08;回溯模板&#xff09; n皇后问题是指将 n 个皇后放在 nn 的国…

用户视角的比特币和以太坊外围技术整理

1. 引言 要点&#xff1a; 比特币L2基本强调交易内容的隐蔽性&#xff0c;P2P交易&#xff08;尤其是支付&#xff09;成为主流&#xff0c;给用户带来一定负担&#xff08;闪电网络&#xff09;在以太坊 L2 中&#xff0c;一定程度上减少了交易的隐蔽性&#xff0c;主流是实…

-bash-4.2$

CentOS 出现-bash-4.2$ 1原因2解决办法 1原因 使用CentOS7时&#xff0c;出现了-bash-4.2$&#xff0c;而不再是usernamelocalhost格式&#xff0c;是因为用户路径/home/username下的配置文件丢失了。 .bashrc .bash_profile2解决办法 复制配置文件到用户目录下。 cp /etc/…

27-3 文件上传漏洞 - 文件类型绕过(后端绕过)

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 导语 后端校验由开发决定是检测文件后缀,还是文件内容。 文件类型绕过(Content-Type) 1)MIME 类型 定义:MIME(Multipurpose Internet Mail Extensions)类型是一种标准,…

数据资产管理之道:PDCA循环引领数字化转型

在数字化浪潮的推动下&#xff0c;数据已成为现代企业的核心竞争力。如何有效地管理这些宝贵的数据资产&#xff0c;确保它们为企业带来持续的竞争优势&#xff0c;成为许多企业迫切需要解决的问题。本文将基于PDCA循环&#xff0c;为您深入剖析如何构建稳健的数据资产管理流程…

Tailwind CSS如何使用

Tailwind CSS 是一个功能类优先的 CSS 框架&#xff0c;它提供了大量的实用工具类&#xff0c;使得在 HTML 文件中直接通过类组合的方式来构建设计而不需要写自定义 CSS。这种方法提供了极高的灵活性和定制性&#xff0c;同时也极大地加快了开发速度。自从它在 2017 年被首次发…

【方法封装】时间格式化输出,获取请求设备和IP

目录 时间类 1.1 获取当前时间&#xff0c;以特定格式化形式输出 1.2 自定义时间&#xff0c;以特定格式化输出 1.3 获取当前时间&#xff0c;自定义格式化 1.4 自定义时间&#xff0c;自定义格式化 设备类 根据请求头信息&#xff0c;获取用户发起请求的设备 请求IP类 …

DVWA靶场-Brute Force暴力破解

DVWA是一个适合新手锻炼的靶机&#xff0c;是由PHP/MySQL组成的 Web应用程序&#xff0c;帮助大家了解web应用的攻击手段 DVWA大致能分成以下几个模块&#xff0c;包含了OWASP Top 10大主流漏洞环境。 Brute Force——暴力破解 Command Injection——命令注入 CSRF——跨站请…

解决找不到d3dx9_42.dll,无法继续执行此代码的多种方法

在计算机使用过程中&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中之一就是“d3dx942.dll丢失”。这个错误通常出现在运行某些游戏或应用程序时&#xff0c;它会导致程序无法正常运行。为了解决这个问题&#xff0c;我们需要采取一些措施来修复丢失的d3dx942.dll文件…

[Golang]K-V存储引擎的学习 从零实现 (RoseDB mini版本)

文章目录 项目的简单介绍详情 代码分析项目结构db.godb_file.goentry.go 项目的简单介绍 对mini-bitcask的学习,从零实现一个k-v存储引擎 原项目的github地址,感谢Rose大佬 mini-bitcask为rosedb的mini版本&#xff0c;博主借此了解k-v存储,该项目通过对一个数据文件进行读写以…

2024年腾讯云免费服务器4核8G配置申请

腾讯云免费服务器4核8G配置申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核4G3M配置&#xff0c;腾讯云服务器网txyfwq.com分享2024年最新腾…

如何在webapp中手动部署

前言&#xff1a;这个有不知道怎么下载Tomcat的可以看我这篇博客的前面&#xff0c;有相关链接&#xff0c;下载好后我那边也有如何运行成功的 在idea中配置tomcat服务器&#xff0c;部署一个项目-CSDN博客 接下来进入这篇博客的正题&#xff01;怎么手动部署 先找到我们下载…

【业务功能篇145】Spring项目中线程池实战应用各种场景ThreadPoolTaskExecutor

【业务功能篇 142】多线程池Semaphore信号量 数据并行处理-CSDN博客 【业务功能篇135】多线程countDownLatch执行大数据量定时任务_countdownlantch 实现多个线程开始执行任务的最大并行性-CSDN博客 线程池ThreadPoolTaskExecutor实战-CSDN博客 springboot线程池ThreadPoo…

每日GEE| Day 01 研究区域矢量数据加载

// Add study region var roi ee.FeatureCollection(geometry) Map.centerObject(roi,8); var styling {color:red,fillColor:00000000,width:2};// display hollow roi Map.addLayer(roi.style(styling), {}, "outline"); 以上代码的功能实现了对研究区域的加载&am…

C语言如何初始化⼆维数组?

一、问题 ⼆维数组怎样初始化&#xff0c;有⼏种⽅法&#xff1f; 二、解答 ⼆维数组和⼀维数组⼀样&#xff0c;也可以在声明时对其进⾏初始化。⼆维数组的初始化⽅式⽐⼀维数组较为复杂&#xff0c;但都是由⼀维数组初始化⽅法⾏⽣⽽来的。在给⼆维数组赋初值时&#xff0c;…

Java零基础入门-如何代码模拟斗地主洗牌发牌动作(上)?

一、本期教学目标 掌握map集合常用方法。掌握map集合使用场景。通过map集合实现斗地主洗牌发牌动作。 二、前言 对于双列集合之map集合&#xff0c;它的相关知识点及拓展咱们都已经差不多学完了。接下来&#xff0c;就是带着大家如何灵活运用map进行一个实战教学&#xff0c;…

阿联酋将资助 OpenAI 的内部芯片

据《金融时报》报道&#xff0c;OpenAI计划开发自己的半导体芯片&#xff0c;以支持高级AI模型的野心可能会从阿拉伯联合酋长国&#xff08;UAE&#xff09;获得支持。 报道称&#xff0c;阿布扎比的国家支持集团MGX正在讨论支持OpenAI的内部构建AI芯片的计划。这一信息来自于…

FFmpeg-aac、h264封装flv及时间转换

文章目录 时间概念流程api核心代码 时间概念 dts: 解码时间戳, 表示压缩帧的解码时间 pts: 显示时间戳, 表示将压缩帧解码后得到的原始帧的显示时间 时间基: time_base &#xff0c; 通常以ms为单位 时间戳: timestamp , 多少个时间基 真实时间&#xff1a;time_base * timest…