自制个人图床

2023-10-26

如何自制个人图床

有时候我们想要将自己的图片以链接的形式展示,就得需要使用图床,或者上传到自己的服务器,别人的图床会担心图片链接过期,然而自己的服务器会占用内存资源。所以我们就自制个人图床,(首先你得有服务器和域名)好了废话不多说直接上教程。

创建七牛云空间

● 七牛服务器官网:https://www.qiniu.com
● 注册七牛云账号,打开管理控制台,对象储存 》 空间管理 》 新建空间。
请添加图片描述

添加七牛访问域名

● 打开管理控制台,对象储存 》 空间管理 》 找到对应的空间名称,设置域名 》 绑定域名
请添加图片描述
● 此时我们将会拿到他的CNAME记录值,填写相应信息,等待解析完成我们的域名就算配置完成了。
请添加图片描述

搭建后台服务器器

在我们创建了七牛云的空间之后会发现每次上传都需要登陆七牛云这样会显得很麻烦,此时七牛云提供了开发者文档,你可以根据自己所熟悉的语言来选择合适的SDK,我这里使用node来进行搭建后台服务。

● 新建Node项目,打开文件根目录打开命令行执行一下命令。

npm init
npm install express --save
npm install qiniu

● 执行成功之后在跟目录创建index.js文件,最终我们将得到以下目录。
请添加图片描述
● 打开index.js写入七牛所需要的的配置项,AK 与SK 在你的 七牛云 》 个人中心 》 密匙管理 里面会有 AK 与 SK。
● AK 代表accessKey。SK 代表secretKe

const qiniu = require('qiniu')
// 创建上传凭证
const accessKey = '你的accessKey'
const secretKey = '你的secretKey'
const mac = new qiniu.auth.digest.Mac(accessKey, secretKey)
const options = {
  scope: 'puter-space', // 刚才所创建的空间命名
  expires: 7200 // 七牛生成token的过期时间。我这里设置为2小时。
}
const putPolicy = new qiniu.rs.PutPolicy(options)
const uploadToken = putPolicy.uploadToken(mac)
console.log(uploadToken)

● 将所有信息填写完成之后我们打开命令行执行

node index.js

● 那么我们怎么利用node来进行前端访问那,此时就得需要node创建服务来为前端生成接口

// 引入包
const express = require('express')
const bodyparse = require('body-parser')
// 创建服务
const app = express()
// 解析数据
app.use(bodyparse.json())

/**
 * @all 跨域
 */
app.all('*', function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*')
  res.header('Access-Control-Allow-Headers', 'X-Requested-With')
  res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS')
  res.header('X-Powered-By', ' 3.2.1')
  // 这段仅仅为了方便返回json而已
  res.header('Content-Type', 'application/json;charset=utf-8')
  next()
})

/**
 * @api 首次调用
 */
app.get('/token', (req, res, next) => {
  console.log('获取到的token', uploadToken)
  res.status(200).json(200, {
    data: uploadToken,
    message: '获取成功!'
  })
})

// 监听8944端口
app.listen(8944, () => {
  console.log('server:' + 'http://localhost:8944')
})
// 执行 node index.js
// 访问 http://localhost:8944/token

创建前端项目

● 前端项目,可以使用Vue也可以使用原生HTML,创建页面毕竟只是单页面只用来上传图片使用看个人意愿。我这里使用Vue + Element

  data() {
    return {
      loading: false,
      qiNiu: "qzonvnza6.hn-bkt.clouddn.com",  // 千牛提供的临时域名
      token: window.localStorage.getItem("key")
    };
  },
  // 我这里将后端请求的token保存到缓存
  created() {
    let key = window.localStorage.getItem("key");
    if (!key) {
      this.getToken("/token");
    }
  },
  methods: {
    async getToken(api) {
      await this.$api
        .get(api)
        .then((res) => {
          window.localStorage.setItem("key", res.data.data);
          this.token = window.localStorage.getItem("key");
        })
        .catch((err) => {
          const m = err || "异常错误请联系管理员!";
          this.$message({
            message: m,
            type: "error",
          });
          console.log(err);
        });
    },
    upload(e) {
      this.loading = true;
      let config = {
        headers: {
          "Content-Type": "multipart/form-data",
        },
      };
      let fileData = new FormData();
      fileData.append("file", e.file);
      fileData.append("token", this.token);
      fileData.append("key", e.file.name);
      this.$api
        .post("http://upload-z2.qiniup.com", fileData, config)
        .then((res) => {
          let href = res.data.key;
          let link = this.qiNiu + href; // 访问的域名
          this.loading = false; 
        })
        .catch((err) => { });
    },
  },

上传前后端代码到服务

前端

● 代码打包上传到码云也可以上传到自己的服务器,我这里上传到码云。
● 配置:新建仓库 》将仓库克隆都本地 》将前端代码打包上传到刚才创建的码云仓库 》 找到服务 》 开启Gitee Pages 选择分支,路径选择运行的目录。

后端

● 将Node项目包括node_modules文件上传到宝塔,文件名自己定义。
● 使用宝塔安装pm2,添加项目,就是你刚才上传Node项目的路径
● 这里的端口一定要在你服务器中打开。并且要与你Node服务所使用的端口保持一致,也可以使用你当前服务器没有占用的端口。— 关于服务器安全策略组配置后期我会更新一篇文章专门来讲解。
● 当我们看到我们服务启动成功之后,这个时候我们就可以使用IP+端口来进行访问我们的接口了。
请添加图片描述

反向代理,有时候我们使用IP+端口进行访问接口的时候总感觉怪怪的这个时候我们就需要给我们服务进行映射,在宝塔添加站点,填写好域名以及目录之后,我们新建的站点就成功了。

请添加图片描述

在我们新建的站点里面找到设置,配置文件,复制以下代码,这个时候我们的反向代理就配置成功了。我们就可以通过域名来访问我们的接口了。

location / 
    {
        proxy_pass http://127.0.0.1:8080;  // 你服务器所在的IP以及端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
                
        #持久化连接相关配置
        #proxy_connect_timeout 30s;
        #proxy_read_timeout 86400s;
        #proxy_send_timeout 30s;
        #proxy_http_version 1.1;
        #proxy_set_header Upgrade $http_upgrade;
        #proxy_set_header Connection "upgrade";        
        expires 12h;
    }

end

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自制个人图床 的相关文章

随机推荐

  • 三种电源防反接电路(二极管、PMOS)

    最近偶然看到PMOS防反接电路 感觉挺实用的 做个记录 软件 LTspice 二极管串联 以常用的5V 2A为例 常用二极管串联在电路中 在电源反接时 二极管承担所有的电压 有效防止电源反接损坏后级设备 但是 二极管上压降较大 损耗较高 使
  • 了解Golang基本数据类型

    文章目录 前言 一 整数数字 二 浮点数字 请注意 与前面的代码一样 Go 会从使用的值推断其数据类型 三 布尔型 四 字符串 五 常见转义字符 五 默认值 六 类型转换 总结 前言 Go 是一种强类型语言 这意味着你声明的每个变量都绑定到
  • Springboot日志级别

    一 开启Springboot详细日志 在application properties文件中添加以下代码 logging level root debug 二 sql打印在控制台 在application properties文件中添加以下代
  • 预测数值型数据:回归源码分析(1)

    回归模型比较简单 这里先简单介绍下 后面遇到难点再具体分析 回归的一般方法 1 收集数据 采用任意方法收集数据 2 准备数据 回归需要数值型数据 标称型数据将被转成二值型数据 3 分析数据 绘出数据的可视化二维图将有助于对数据做出理解和分析
  • 零基础入门microbit教程

    1 什么是microbit 1 micro bit 百度百科 micro bit 是一款由英国广播电视公司 BBC 推出的专为青少年编程教育设计的微型电脑开发板 2 官网介绍 The Micro bit Educational Founda
  • OC语言——点语法和成员变量的4种作用域及property和synthesize的使用

    点语法 点语法的本质还是方法调用 Person p Person new 点语法的本质还是方法调用 p age 10 p setAge 10 一 点语法注意点 implementation Person setter方法中的死循环 void
  • LLVM - 学习笔记一

    1 工具和库 LLVM中的独立工具 opt 在IR级对程序进行优化的工具 输入必须是LLVM的bitcode 生成的输出文件必须具有相同的类型 llc 通过特定后端将LLVM bitcode转换成目标汇编或目标问价的工具 llvm mc 能
  • Hadoop之MapReduce工作原理

    Hadoop由两部分组成 分别是分布式文件系统HDFS和分布式计算框架MapReduce 其中 分布式文件系统HDFS主要用于大规模数据的分布式存储 而MapReduce则构建在分布式文件系统上 对于存储在分布式文件系统的数据进行分布式计算
  • 【对比Java学Kotlin】在 foreach 中使用 break&continue

    正常情况下 我们只能在 loop 中使用 break 和 continue 但是 foreach 是扩展函数 不属于 loop 的范畴 如果我们想在 foreach 中达到 break 和 continue 的效果 只能使用 return
  • echo source 命令与 setup.bash与.bashrc文件

    编译完毕后键 echo source catkin ws devel setup bash gt gt bashrc source bashrc 本文分析这两条命令 echo 与source 以及setup bash文件与 bashrc两个
  • Flutter 布局Row(水平方向布局)、Column(垂直方向布局)、Wrap(可以自动换行的布局)、Flex(弹性布局)、Stack(叠层布局)、

    1 线性布局 Row 水平方向布局 Row 表示水平方向子组件的布局顺序 是从左往右还是从右往左 默认为系统当前Locale环境的文本方向 如中文 英语都是从左往右 而阿拉伯语是从右往左 TextDirection textDirectio
  • 通过模拟退火改进的Elman神经网络(Matlab代码实现)

    目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 1 概述 神经网络是一个庞大的体系和概念 根据处理信息的不同方式来区分不同的network 比如根据处理信息结果的传递方向 分前馈型与反馈型 前馈型网络会根据输出数值来调整网
  • dede php调用指定文章,DedeCMS调用指定文章内容的两种实现方法

    有时候我们需要dedecms能够调用指定文章的内容 尤其是在建企业网站的时候 需要在首页调用网站简介联系我们什么的 今天 织梦技术研究中心就给大家介绍两种实现调用指定文章内容的方法 方法一 打开include inc arcpart vie
  • Golang基础 函数详解 函数基础

    文章目录 01 函数声明 02 更多样的参数列表 03 更灵活的返回值列表 参考资料 函数是一个固定的 可重复使用的程序段 子程序 它在实现单一或相关联功能的同时 还可以带有入口和出口 所谓的入口 就是函数参数即形参 通过这个入口把函数的参
  • 最强 Verilog 中 IP核 调用实现及思想

    写在前面 无论是在 ISE 还是 Vivado 中 关于 IP核 的调用都是非常方便的 所以对于初学者来说最关键的不是在 IP Catalog 中设置相关的 IP核 参数 而是在生成相关的 IP核 后该怎么做 也即如何让这些 IP核 为项目
  • 海思3516系列芯片SPI速率慢问题深入研究与优化(基于PL022 SPI 控制器)

    海思3516系列芯片SPI速率慢问题深入分析与优化 基于PL022 SPI 控制器 我在某个海思主控的项目中需要使用SPI接口来驱动一块液晶屏 液晶屏主控为 st7789 分辨率 240x240 图像格式 RGB565 查阅海思相关手册可知
  • HDU - 1598之为达目的不择手段(并查集的应用)

    find the most comfortable road Time Limit 1000 1000 MS Java Others Memory Limit 32768 32768 K Java Others Total Submissi
  • docker快速搭建redis集群(两种暴露宿主网络的方法)

    宿主机IP 192 168 123 181 方案一 host网络模式 1 新建6个容器节点 for port in seq 4001 4006 do docker run itd name redis port network host v
  • Java线程:volatile关键字

    本文转载至 http lavasoft blog 51cto com 62575 222076 Java线程 volatile关键字 Java 语言包含两种内在的同步机制 同步块 或方法 和 volatile 变量 这两种机制的提出都是为了
  • 自制个人图床

    如何自制个人图床 有时候我们想要将自己的图片以链接的形式展示 就得需要使用图床 或者上传到自己的服务器 别人的图床会担心图片链接过期 然而自己的服务器会占用内存资源 所以我们就自制个人图床 首先你得有服务器和域名 好了废话不多说直接上教程