vue+element ui上传图片到七牛云服务器

本来打算做一个全部都是前端完成的资源上传到七牛云的demo,但是需要获取token,经历了九九八十一难,最终还是选择放弃,token从后端获取(springboot)。如果你们有前端直接能解决的麻烦记得私我哦!!!

效果展示

先看看文档:

element ui :https://element.eleme.cn/#/zh-CN/component/upload

七牛云:https://developer.qiniu.com/kodo/1283/javascript

前端

  1. 首先安装七牛云的JS的sdk
bash 复制代码
npm install qiniu-js
  1. 此处域名是指向你自己的七牛云域名,目的是让照片回显。如何在七牛云中找到自己的域名请看下面。

    3 .七牛云中找到自己的域名
html 复制代码
<template>
    <div>
        <el-upload class="upload-demo" action="https://upload.qiniup.com" :on-remove="handleRemove" :file-list="fileList"
            list-type="picture" :http-request="customUpload" accept="image/jpeg,image/gif,image/png">
            <el-button size="small" type="primary">点击上传</el-button>
            <div slot="tip" class="el-upload__tip">只能上传jpg/png/gif文件,且不超过2M</div>
        </el-upload>
    </div>
</template>

<script>
//这里我下面会提供给,其实就是一个后端接口,后面会说怎么获取tonken的,根据自己的需求来
import { qiniuTonken } from "@/js/qiniu_token"

export default {
    name: "photoList",
    data() {
        return {
            fileList: [],
        }
    },
    created() {
        this.getQiniuToken()
    },
    methods: {
        getQiniuToken() {
            qiniuTonken().then(res => {
                this.yourQiniuUploadToken = res.data.data
            })
        },
        //移除图片的处理
        handleRemove(file, fileList) {
            console.log(file, fileList);
        },
        beforeUpload(file) {
            // 在上传之前的逻辑,可以做一些检查或者其他处理
            return true; // 返回true允许上传,返回false阻止上传
        },
        customUpload(file) {
            const qiniu = require('qiniu-js');

            // 自定义上传方法,使用qiniu-js库进行上传
            const date = new Date();
            const year = date.getFullYear();
            const month = date.getMonth() + 1;
            const directory = 'sm-frontend/' + year + '/' + month + '/';

            const fileName = file.file.name;
            const key = directory + fileName;

            const observable = qiniu.upload(file.file, key, this.yourQiniuUploadToken);

            return observable.subscribe({
                complete(res) {
                    // 上传完成时的回调
                    const imageUrls = 'http://***/' + res.key
                    const file_data = {
                        name: fileName,
                        url: imageUrls,
                    }
                    _this.fileList.push(file_data)
                    
                    // 将成功状态标记添加到文件对象中。后续测试发现不加也可以,哈哈哈。是之前直接使用this的原因。这里就不去掉了。
                    const uploadedFileIndex = _this.fileList.findIndex(file => file.url === imageUrls);
                    //使用了 findIndex 方法来找到对应文件的索引,然后将状态标记为成功。请尝试修改代码并重新测试上传功能
                    if (uploadedFileIndex !== -1) {
                        console.log(uploadedFileIndex)
                        this.fileList[uploadedFileIndex].status = 'success';
                    }

                },
                next(res) {
                    // 上传过程中的回调,如果需要可以在这里处理上传进度等信息
                },
                error(err) {
                    // 上传出错时的回调
                },
            });
        }
    }
}
</script>

JS

后端

技术:springboot、maven...

  1. 引入maven
xml 复制代码
        <!-- 七牛云 -->
        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>qiniu-java-sdk</artifactId>
            <version>7.2.7</version>
        </dependency>
  1. 编写controller代码
java 复制代码
package com.admin.controller.admin.email;

import com.common.util.QiniuUtil;
import com.system.constant.HTTPStatus;
import com.system.response.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Classname QiniuController
 * @Date 2023/8/8 13:32
 * @Created ZFC
 */
@RestController
@RequestMapping("/sys/qiniu")
public class QiniuController {

    @GetMapping("/getUpToken")
    public Result getUpToken(@RequestParam(value = "key", required = false) String key){
        return new Result().setCode(HTTPStatus.SUCCESS).setData(QiniuUtil.getToken(key));
    }
}
  1. util代码
java 复制代码
import com.qiniu.util.Auth;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class QiniuUtil {

    public static String getToken(String key) {
        Auth auth = Auth.create(***ACCESS_KEY***, ***SECRET_KEY***);
        return auth.uploadToken(***BUCKET***, key);
    }
}
  1. 获取相关参数
    ACCESS_KEY、SECRET_KEY
    BUCKET
相关推荐
0DayHP15 分钟前
HTB:Bike[WriteUP]
运维·服务器
计算机学姐15 分钟前
基于微信小程序的调查问卷管理系统
java·vue.js·spring boot·mysql·微信小程序·小程序·mybatis
DieSnowK17 分钟前
[C++][第三方库][httplib]详细讲解
服务器·开发语言·c++·http·第三方库·新手向·httplib
勿语&4 小时前
Element-UI Plus 暗黑主题切换及自定义主题色
开发语言·javascript·ui
黄尚圈圈4 小时前
Vue 中引入 ECharts 的详细步骤与示例
前端·vue.js·echarts
热爱嵌入式的小许6 小时前
Linux基础项目开发1:量产工具——显示系统
linux·运维·服务器·韦东山量产工具
一路向前的月光9 小时前
Vue2中的监听和计算属性的区别
前端·javascript·vue.js
长路 ㅤ   9 小时前
vue-live2d看板娘集成方案设计使用教程
前端·javascript·vue.js·live2d
韩楚风10 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学10 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm