首页 > 其他分享 >七牛云的使用

七牛云的使用

时间:2023-09-05 20:22:15浏览次数:33  
标签:const require qiniu 使用 var 七牛云 上传 图片

准备工作

进入七牛云官网 注册账号 → 绑定邮箱 → 完成认证
登录七牛云 → 点击右上角头像 → 进入个人中心 → 进入密钥管理 -> 复制AK和SK(待会儿要用到)
七牛云密钥
点击左上角列表按钮 → 展开产品浮层 → 点击对象存储Kodo → 进入空间管理 → 新建空间 → 记住存储空间名称(待会儿要用到)→ 记住存储区域(就近选择,待会儿要用到) → 访问控制选择公开

七牛云的主要操作步骤(仅仅是主要步骤)

登录七牛云 → 点击右上角导航 → 选择文档 → 进入开发者中心 → 点击左上角导航SDK&工具 → 进入官方SDK → 找到nodejs(服务端) → 进入文档

  • 第一步:安装qiniu npm install qiniu 然后导入qiniu const qiniu = require("qiniu")
  • 第二步:根据文档操作 首先配置AK/SK/bucket
    文件上传配置AK/SK/bucket
  • 第三步:根据文档 找到构建配置类
    构建配置类
  • 第四步:根据文档 找到文件上传
    文件上传

图片上传的全部流程(使用七牛云)

其中public文件夹 用于在本地服务器暂存上传的图片 等上传到云端后 在本地就会删除 使用了fs.unlink
代码分布

搭建服务器 一级路由 (server.js)
const express = require('express')
const app = express()

//使用cors解决跨域
const cors = require('cors')
app.use(cors())


// 一级路由
app.use("/admin",require("./router/index.js"))

//开放静态资源
app.use(express.static('public'))
app.listen(8080);
搭建二级路由 (./router/index.js)
const router = require('express').Router()

// 二级路由
router.use("/upload",require("./upload.js"))

module.exports = router
搭建三级路由 以及图片上传流程 (./router/upload.js)
const router = require('express').Router()
const { v4: uuidv4 } = require('uuid');  //使用uuid为上传到云端的文件命名为全球唯一
const path = require("path") //在获取本地服务器暂存图片的路径以及获取上传图片的文件后缀名时用到
const fs = require("fs") //在删除本地服务器暂存的图片时用到
//导入 multer
const multer = require("multer")  //在配置本地服务器存储空间时用到


// 导入 qiniu
const qiniu = require("qiniu")

// 配置三个空间
var accessKey = 'oW3ATfjdb1EcK214vQy0Prf5Q9DcWu_IHFZgntFC';
var secretKey = 'u0FklSLJyfg9F7R2Zbp9teid_OEgeZGIMPS0UCII';
var mac = new qiniu.auth.digest.Mac(accessKey, secretKey);

var options = {
    scope: "bingmin",
};
var putPolicy = new qiniu.rs.PutPolicy(options);
var uploadToken = putPolicy.uploadToken(mac);


// 构建配置类
//七牛云的地址
var config = new qiniu.conf.Config();
// 空间对应的机房
config.zone = qiniu.zone.Zone_z2;

//图片上传 => 配置存储(配置仓库)
const storage = multer.diskStorage({
    //存储路径
    destination(req, file, cb) {
        cb(null, "public")
    },
    //存储名称
    filename(req, file, cb) {
        // 将存储的图片的命名为全球唯一  path.extname(file.originalname) 获取上传的文件的后缀名
        cb(null, uuidv4() + path.extname(file.originalname))
    }
})

//实现存储
const storageInfo = multer({ storage })  

//三级路由 => 
router.post("/file", storageInfo.single('img'), (req, res) => {
    // console.log(req);
    // 图片上传
    var localFile = req.file.path;
    var formUploader = new qiniu.form_up.FormUploader(config);
    var putExtra = new qiniu.form_up.PutExtra();
    // 文件上传
    formUploader.putFile(uploadToken, null, localFile, putExtra, function (respErr,
        respBody, respInfo) {
        if (respErr) {
            throw respErr;
        }
        //七牛云服务器给你的服务器响应成功,那么就把public里面的图片给删除
        if (respInfo.statusCode == 200) {
            fs.unlink(localFile, (err) => {
                if (err) console.log("删除图片失败");
                console.log("删除图片成功");
            })
            res.send({
                code: 200, msg:`http://s0ibcpwei.hn-bkt.clouddn.com/${respBody.hash}`})
        } else {
            console.log(respBody);
        }
    });
})


前端页面 (web/index.html)
<body>
    <!-- 服务器就是根据name=>获取前端的信息 -->
    <form>
        <label>
            <img src="../img/默认图片.jpg" alt="">
            <input type="file" name="img">
        </label>
    </form>
    <script>
        /*
            文件上传前端 =>
                1.post请求
                2.FormData=>提交给ajax 
         */
         const inpELe = document.querySelector("input")
         const imgELe = document.querySelector("img")
        //  change事件 意味着图片点击了上传图片
            inpELe.onchange = function () {
                //校验 => 
                // console.dir(inpELe.files[0].name)
                // 获取上传的图片的文件名
                const filename = inpELe.files[0].name;
                // 限制图片类型
                if (!filename.endsWith("jpg")) return alert("请上传jpg格式的图片")

                const formEle = document.querySelector("form")
                const fm = new FormData(formEle);

                //校验之后,打算上传
                const xhr = new XMLHttpRequest()
                xhr.open("post", "http://localhost:8080/admin/upload/file")
                xhr.send(fm)
                xhr.onload = function () {
                    const res = JSON.parse(xhr.responseText)
                    if (res.code == 200) {
                        // 获取图片路径
                        imgELe.src =  res.msg
                    }
                }
            }
    </script>

</body>

标签:const,require,qiniu,使用,var,七牛云,上传,图片
From: https://www.cnblogs.com/bingMIN/p/17680721.html

相关文章

  • 【坑】VUE中动态数据使用 wow.js 没效果的问题
    一般来说正常使用都是在mounted函数中mounted(){this.$nextTick(()=>{this.$wow.init()})}这样如果是死数据是可以正常出现效果的但是如果是请求回来的数据是没有效果的需要改一下生成时机  此处的newList即为请求的数据watch:{newsl......
  • 2023你需要使用的最佳VSCode扩展
    VisualStudioCode(VSCode)是一款广受欢迎的多功能代码编辑器,在最新的StackOverflow开发者调查中,近75%的开发者将其选为首选集成开发环境。VSCode提供了一系列开箱即用的特性和功能,但其真正的威力在于市场上庞大的扩展生态系统。整理了VSCode30大扩展列表,希望大家能使用这些......
  • 使用 MYSQL 对列中特定范围的数字求和
    使用MySQL对列中特定范围的数字求和,可以使用SQL的SUM()函数结合WHERE子句来实现。以下是一个示例:SELECTSUM(column_name)ASsum_resultFROMtable_nameWHEREcolumn_name>=start_valueANDcolumn_name<=end_value;在上述代码中,将column_name替换为要计算求和的......
  • 关于在数据库系统MMAP的使用
    问题引出在数据库系统中对于文件I/O管理,通常有两种选择开发者自己实现bufferbool来管理文件I/O读入内存的数据使用Linux操作系统实现的MMAP系统调用映射到用户地址空间,并且利用对开发者透明的pagecache来实现页面的换入换出理论介绍 程序调用MMAP返回了指向文件内容......
  • 如何使用Java在华为云OBS上传大文件?
    在互联网时代,数据量的快速增长已成为了一种普遍的趋势。随着云计算技术的发展,云存储服务成为了存储和管理大量数据的一种重要手段。华为云对象存储服务(OBS)作为一种高可靠、高可用、高性能的云存储服务,得到了广泛的应用和认可。在使用华为云OBS上传大文件时,我们可以使用Java代码实现......
  • 使用中间件
    使用中间件Express是一个路由和中间件Web框架,它自己的功能很少:Express应用程序本质上是一系列中间件函数调用。中间件函数是有权访问请求对象()、响应对象 ()和应用程序请求-响应周期中的下一个中间件函数的函数。下一个中间件函数通常由名为的变量表示。reqresnext中间件......
  • 使用 Docker Compose 部署 Redis Sentinel 高可用架构
    在现代应用中,无法容忍系统中断或数据丢失。Redis作为一种高性能的内存数据库,被广泛应用于缓存、会话管理等场景。然而,即使我们拥有可伸缩的RedisCluster集群,也需要考虑在主节点故障时自动切换到从节点的机制。这时候RedisSentinel就派上用场了。高可用性是分布式应用的核心......
  • Node.js 使用 officecrypto-tool 读取加密的 Excel (xls, xlsx) 和 Word( docx)文档
    Node.js使用officecrypto-tool读取加密的Excel(xls,xlsx)和Word(docx)文档,还支持xlsx和docx文件的加密(具体使用看文档)。暂时不支持doc文件的解密传送门:officecrypto-tool读取加密的Excel示例一:xlsx-populate//只支持xlsx,xlsx-populate自带了解密功能,/......
  • 【C++STL基础入门】队列的基础使用
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档@TOC前言C++标准模板库(STL)提供了一系列强大的容器和算法,方便我们在编程中处理数据和实现各种功能。其中,queue(队列)是STL中的一个重要容器,用于按照先进先出(FIFO)的顺序处理元素。本文将介绍queue的基础使用方法,帮助读者初......
  • 使用 SQLStudio 进行数据库管理并通过 Docker Compose 进行部署
    在现代软件开发中,数据库管理是一个至关重要的环节。SQLStudio是一个强大的工具,可以帮助开发人员轻松管理数据库,现在改名成SQLynx,我们用的是旧的镜像,本文还是用SQLStudio这个名称。同时,使用DockerCompose可以简化应用程序的部署过程,使整个开发流程更加高效和可靠。最近了看到有......