零成本!无需服务器,搭建你的图床!

2024-06-19 18:52

本文主要是介绍零成本!无需服务器,搭建你的图床!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先给大家看看成品:
image.png

访问地址:http://cp64mba5g6h48vl4is50.app.memfiredb.cn/

这是我花十分钟做出来的零成本,不需要服务器的图床,不需要登录,任何人都可以在上面上传图片和拿到图片链接去使用,当然这只是一个简单的图床功能,后续我会慢慢优化更强大。接下来我将教大家如何做一个零成本,无需服务器的免费图床。

1.创建免费应用

先去前往MemFire Cloud登录后,在首页创建一个免费的应用

image.png

这个应用创建完成后,你将拥有

  • 免费云数据库
  • 自动生成api
  • 对象存储
  • 二十几种第三方认证服务
  • 实时数据库
  • 静态托管

然后我们这个图床主要用到的是自动生成api和对象存储

2.创建存储桶

应用创建完成后,我们先去存储的界面创建一个存储桶用来存放图片

image.png

image.png

3.初始化vue项目

大家可以用npx或者vue创建都可以,我是用vue创建的

vue create vue-tuchuang

创建完成后,在根目录下创建一个.env.local,来存放环境变量

4.安装依赖包

安装用于访问应用资源的依赖包

npm i @supabase/supabase-js

5.配置环境变量

在MemFire Cloud应用控制台的“应用设置”->“API”找到应用的URL和anon 公钥,分别填到.env.local里面

image.png

VITE_SUPABASE_URL=
VITE_SUPABASE_ANON_KEY=

6.初始化客户端

在src下面创建一个supabase.js,将下面的代码填入

import { createClient } from '@supabase/supabase-js'const supabaseUrl = import.meta.env.VITE_SUPABASE_URL
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEYexport const supabase = createClient(supabaseUrl, supabaseAnonKey)

7.编写页面

src\App.vue

<template><div id="app"><header><h1>图床</h1><input type="file" @change="handleFileUpload" accept="image/*" /></header><main><section v-if="fileList.length > 0"><h2>已上传的图片</h2><ul class="image-list"><li v-for="(image, index) in fileList" :key="index" class="image-item"><img :src="image.publicUrl" alt="uploaded image" @click="showImage(index)" /><div class="image-overlay"><span class="image-name">{{ truncateFileName(image.name) }}</span><button @click="copyImageUrl(index)">复制URL</button></div></li></ul></section><section v-else><p style="color: black;">暂无上传的图片</p></section></main><!-- 放大查看图片的弹窗 --><div v-if="showModal" class="modal" @click="closeModal"><div class="modal-content"><img :src="selectedImageUrl" alt="enlarged image" /></div></div></div>
</template><script>
import { ref, onMounted } from 'vue';
import { supabase } from './supabase';export default {setup() {const fileList = ref([]);const files = ref();const showModal = ref(false);const selectedImageUrl = ref('');onMounted(() => {getImageUrl();});const handleFileUpload = async (evt) => {files.value = evt.target.files;try {if (!files.value || files.value.length === 0) {throw new Error('请选择要上传的图片.');}const file = files.value[0];const fileExt = file.name.split('.').pop();const filePath = `${Math.random()}.${fileExt}`;let { error: uploadError } = await supabase.storage.from('drawingBoard').upload(filePath, file);if (uploadError) throw uploadError;getImageUrl();} catch (error) {alert(error.message);}};const copyImageUrl = (index) => {const publicUrl = fileList.value[index].publicUrl;navigator.clipboard.writeText(publicUrl).then(() => {alert(`已复制图片URL:${publicUrl}`);}).catch((err) => {console.error('复制失败:', err);});};const getImageUrl = async () => {const { data, error } = await supabase.storage.from('drawingBoard').list()const filteredData = data.filter(item => item.name !== ".emptyFolderPlaceholder");filteredData.forEach((item) => {const { data } = supabase.storage.from('drawingBoard').getPublicUrl(item.name)if (data) {item.publicUrl = data.publicUrl}})if(filteredData.length >0){fileList.value = filteredData}}const showImage = (index) => {selectedImageUrl.value = fileList.value[index].publicUrl;showModal.value = true;};const closeModal = () => {showModal.value = false;};const truncateFileName = (fileName) => {const maxLength = 20; // 设置名称最大长度if (fileName.length > maxLength) {return fileName.substring(0, maxLength - 3) + '...'; // 超过长度则省略}return fileName;};return {fileList,handleFileUpload,copyImageUrl,showImage,showModal,selectedImageUrl,closeModal,truncateFileName};},
};
</script><style>
#app {font-family: Arial, sans-serif;margin: 0 auto;max-width: 800px;padding: 20px;
}header {display: flex;align-items: center;justify-content: space-between;margin-bottom: 20px;
}
h2{color: #000;
}
header h1{font-size: 24px;margin: 0;
}input[type='file'] {display: inline-block;padding: 10px;
}main {background-color: #f5f5f5;padding: 20px;
}
ul.image-list li img:hover {transform: scale(1.1); /* Enlarge on hover */
}
ul.image-list {list-style: none;padding: 0;display: flex;flex-wrap: wrap;gap: 20px;
}.image-item {width: calc(33.33% - 20px);text-align: center;margin-bottom: 20px;position: relative;
}.image-item img {/* max-width: 100%;border-radius: 5px;box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);cursor: pointer; */max-width: 100%;height: auto; /* Maintain aspect ratio */border-radius: 5px;box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);cursor: pointer; /* Show pointer on hover for clicking */transition: transform 0.2s ease; /* Add smooth transition for scaling */
}.image-overlay {position: absolute;bottom: 10px;left: 0;right: 0;background-color: rgba(0, 0, 0, 0.5);padding: 5px;border-radius: 5px;
}.image-overlay .image-name {display: block;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;color: #000; /* 设置名称颜色为黑色 */
}button {padding: 5px 10px;margin-left: 10px;background-color: #007bff;color: white;border: none;border-radius: 3px;cursor: pointer;
}/* 弹窗样式 */
.modal {position: fixed;top: 0;left: 0;width: 100%;height: 100%;background-color: rgba(0, 0, 0, 0.7);display: flex;justify-content: center;align-items: center;z-index: 999;
}.modal-content {max-width: 80%;max-height: 80%;overflow: auto;
}.modal-content img {max-width: 100%;max-height: 100%;border-radius: 5px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
}
</style>

8.运行程序

npm run dev

效果:

image.png

9.静态托管

项目开发完了,大家肯定想把这个作品展示给自己朋友或者网友使用,刚好我们使用MemFire Cloud的静态托管来托管我们的项目,就相当于部署我们的项目,我们不需要在服务器上部署。
在根目录下执行命令

npm run build

打包完成后,我们进入文件资源管理器,将里面的所有文件选中打成一个zip压缩包

image.png

image.png

我们再次打开MemFire Cloud应用的控制台,我们来到静态托管的选项下,然后将我们刚刚打包好的压缩包上传到这里,上传完成后会发现上面出现一个访问地址,这个地址就可以给大家安全的访问啦,如果你觉得这个地址有点丑,你还可以去配置域名,前提是你已经有了一个域名并且已经备案了。

image.png

好啦,咱们这个简单的图床就做好了,全程没有需要服务器,零成本完成的!后续我会慢慢优化这个图床!大家也可以试试用MemFire Cloud来做一些应用。

具体的大家可以参考或者阅读一下文档

这篇关于零成本!无需服务器,搭建你的图床!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075858

相关文章

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

2024.6.24 IDEA中文乱码问题(服务器 控制台 TOMcat)实测已解决

1.问题产生原因: 1.文件编码不一致:如果文件的编码方式与IDEA设置的编码方式不一致,就会产生乱码。确保文件和IDEA使用相同的编码,通常是UTF-8。2.IDEA设置问题:检查IDEA的全局编码设置和项目编码设置是否正确。3.终端或控制台编码问题:如果你在终端或控制台看到乱码,可能是终端的编码设置问题。确保终端使用的是支持你的文件的编码方式。 2.解决方案: 1.File -> S

通过SSH隧道实现通过远程服务器上外网

搭建隧道 autossh -M 0 -f -D 1080 -C -N user1@remotehost##验证隧道是否生效,查看1080端口是否启动netstat -tuln | grep 1080## 测试ssh 隧道是否生效curl -x socks5h://127.0.0.1:1080 -I http://www.github.com 将autossh 设置为服务,隧道开机启动

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)

【服务器运维】CentOS6 minimal 离线安装MySQL5.7

1.准备安装包(版本因人而异,所以下面的命令中版本省略,实际操作中用Tab自动补全就好了) cloog-ppl-0.15.7-1.2.el6.x86_64.rpmcpp-4.4.7-23.el6.x86_64.rpmgcc-4.4.7-23.el6.x86_64.rpmgcc-c++-4.4.7-23.el6.x86_64.rpmglibc-2.12-1.212.el6.x86_64.r

【服务器运维】CentOS7 minimal 离线安装 gcc perl vmware-tools

0. 本机在有网的情况下,下载CentOS镜像 https://www.centos.org/download/ 1. 取出rpm 有的情况可能不需要net-tools,但是如果出现跟ifconfig相关的错误,就把它安装上。另外如果不想升级内核版本的话,就找对应内核版本的rpm版本安装 perl-Time-Local-1.2300-2.el7.noarch.rpmperl-Tim

人工和AI大语言模型成本对比 ai语音模型

这里既有AI,又有生活大道理,无数渺小的思考填满了一生。 上一专题搭建了一套GMM-HMM系统,来识别连续0123456789的英文语音。 但若不是仅针对数字,而是所有普通词汇,可能达到十几万个词,解码过程将非常复杂,识别结果组合太多,识别结果不会理想。因此只有声学模型是完全不够的,需要引入语言模型来约束识别结果。让“今天天气很好”的概率高于“今天天汽很好”的概率,得到声学模型概率高,又符合表达

SQL Server中,always on服务器的相关操作

在SQL Server中,建立了always on服务,可用于数据库的同步备份,当数据库出现问题后,always on服务会自动切换主从服务器。 例如192.168.1.10为主服务器,12为从服务器,当主服务器出现问题后,always on自动将主服务器切换为12,保证数据库正常访问。 对于always on服务器有如下操作: 1、切换主从服务器:假如需要手动切换主从服务器时(如果两个服务

时间服务器中,适用于国内的 NTP 服务器地址,可用于时间同步或 Android 加速 GPS 定位

NTP 是什么?   NTP 是网络时间协议(Network Time Protocol),它用来同步网络设备【如计算机、手机】的时间的协议。 NTP 实现什么目的?   目的很简单,就是为了提供准确时间。因为我们的手表、设备等,经常会时间跑着跑着就有误差,或快或慢的少几秒,时间长了甚至误差过分钟。 NTP 服务器列表 最常见、熟知的就是 www.pool.ntp.org/zo

在服务器上浏览图片

@StarSky 2018-10-26 15:09 字数 15971 阅读 28 https://www.zybuluo.com/StarSky/note/1294871 来源 2018-09-27 线上服务器安装 imgcat Tool   2018-09-27 线上服务器安装 imgcat 0. 准备文件:iterm2_shell_integration.bash1. 在有权限