3分钟使用OSS搭建个人的在线图床

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 代码已经提前给大伙儿码好了(原生三大件,无框架代码),大伙儿只需要注册个七牛云账号,改4行代码即可最终效果如下,非常简洁(麻雀虽小五脏俱全)支持复制粘贴,截图,手动选择,拖拽等四种常见的上传方案

线上预览



所需准备


记得选择创建公开的存储空间



快速上手


1.clone仓库


git clone https://github.com/ATQQ/image-bed-qiniu.git


2.安装依赖


yarn install


3.修改环境变量


根目录创建.env.local或者直接修改.env文件,加入以下内容

这4项均需自己配置


QINIU_ACCESS_KEY=AccessKey 
QINIU_SECRET_KEY=SecretKey
QINIU_BUCKET=Bucket # OSS空间名
QINIU_DOMAIN=domain # 图床域名(包含协议https/http)


下面通过截图展现了几个变量的获取位置

查看 bucket


网络异常,图片无法展示
|


查看 Access Key和Secret Key


网络异常,图片无法展示
|


网络异常,图片无法展示
|

查看域名


网络异常,图片无法展示
|


4. 启动


开发环境预览


yarn dev


生产构建


yarn build


构建结果可直接进行进行部署

没有云服务的掘友,可采用免费的腾讯云Serverless部署

站内查看Serverless部署静态资源站点的手把手教程


关键实现部分介绍


textarea区域承载上述操作


const pastePanel = document.getElementById('pastePanel');


读取剪贴板中的内容


  • 监听目标Dom的paste事件
  • 在回调函数中的event.clipboardData.items中获取剪贴板中的内容
  • 其中items的每一个元素itemkindtype两个属性
  • 通过kind属性筛选剪贴版中内容的类型,通过type判断值的MIME 类型是否为图片
  • 判断结果是我们所需要得图片文件之后调用item.getAsFile方法将内容转为File对象
  • 调用上传方法即可


/**
 * 监听粘贴事件
 */
pastePanel.addEventListener('paste', function (e) {
    console.log('paste');
    // 阻止触发默认的粘贴事件
    e.preventDefault();
    let { items } = e.clipboardData;
    for (const item of items) {
        if (item.kind === "file" && item.type.startsWith("image")) {
            //上传的文件对象
            let file = item.getAsFile();
            //文件名(加一个前缀相当于目录)
            let fileName = 'mdImg/' + btoa(Date.now()) + Date.now().toString().substring(1);
            //开始上传
            uploadFile(file, fileName);
        } else if (item.type === 'text/plain') {
            item.getAsString(str => {
                e.target.value += str;
            });
        }
    }
})


获取拖拽得文件


  • 首先禁用document上的drop事件
  • 监听目标Dom的drop事件
  • 在回调函数中的event.dataTransfer.files中获取拖拽释放的内容
  • 通过file.type判断文件的MIME 类型是否为图片
  • 调用上传方法


// 禁用默认的拖拽触发的内容
document.addEventListener('drop', function (e) {
    e.preventDefault()
}, true)
document.addEventListener('dragover', function (e) {
    e.preventDefault()
}, true)
pastePanel.addEventListener('drop', function (e) {
    let { files } = e.dataTransfer;
    for (const file of files) {
        if (file.type.startsWith("image")) {
            //文件名(加一个前缀相当于目录)
            let fileName = 'mdImg/' + btoa(Date.now()) + Date.now().toString().substring(1);
            //开始上传
            uploadFile(file, fileName);
        }
    }
})


将内容写入剪贴板


这个就是最简单的一个写法,不考虑兼容性


/**
 * 将结果写入的剪贴板
 * @param {String} text 
 */
function copyRes(text) {
    const input = document.createElement('input');
    document.body.appendChild(input);
    input.setAttribute('value', text);
    input.select();
    if (document.execCommand('copy')) {
        document.execCommand('copy');
    }
    document.body.removeChild(input);
}


相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
6月前
|
存储 安全 对象存储
手把手教你搭建阿里云图床(PicGo+Typora+阿里云OSS),新手小白一看就会
本文详细介绍了怎样帮助新手小白从注册,购买阿里云OSS,到一步一步配置OSS做为图床,和PicGo、Typora软件连接,配置好关联之后,在使用Typora写文章时,如果需要插入图片,只需要将图片复制粘贴到Typora的编辑区域,就会自动通过PicGo上传到指定图床,自动复制外网能访问的URL并展示,简直不要太方便,极大的解决了编辑文章时复制处理图片链接的痛点。
3052 6
手把手教你搭建阿里云图床(PicGo+Typora+阿里云OSS),新手小白一看就会
|
存储 安全 数据管理
阿里云OSS图床搭建
阿里云OSS图床搭建
8399 3
|
对象存储 容器
Typora配置阿里云OSS作为图床上传图片
Typora配置阿里云OSS作为图床上传图片
806 0
|
6月前
|
存储 Oracle 关系型数据库
Typora+PicGo+super-prefix+阿里云OSS设置图床
Typora+PicGo+super-prefix+阿里云OSS设置图床
|
存储 搜索推荐 程序员
配置Picgo图床之COS、OSS、Github图床
配置Picgo图床之COS、OSS、Github图床
|
存储 API 对象存储
手把手教你Typora图床配置(PicGo+阿里云OSS/腾讯云COS)
手把手教你Typora图床配置(PicGo+阿里云OSS/腾讯云COS)
2308 0
|
对象存储 数据安全/隐私保护
oss对象存储+PicGo+Typora配置图床详细说明(二)
oss对象存储+PicGo+Typora配置图床详细说明
162 0
|
对象存储
oss对象存储+PicGo+Typora配置图床详细说明(一)
oss对象存储+PicGo+Typora配置图床详细说明
109 0
|
存储 编译器 对象存储
Typora+PicGo+阿里云OSS搭建博客图床
Typora+PicGo+阿里云OSS搭建博客图床
372 0
|
存储 编译器 对象存储
博客如何注重内容本身,那就看看图床搭建,PicGo+typora+阿里云OSS
1. 图床的介绍和markdown编译器介绍 图床是什么? 首先,图床在我们眼里一眼看上去很陌生,其实它很简单理解。你也可以点击这个图床链接看看图床。实际上,图床就是一个储存照片的服务器。
271 0