个人图床实现
介绍
功能
核心功能包括:注册、登录、上传图片、图片删除、图床展示等。。
游客也可以直接上传图片,但有大小限制,且游客图床共享。
登录用户图床隔离。
技术栈
react-create-app、styled-components、React-Router、Mobx、Antd、MemFire
链接
使用到的BaaS能力
- 云数据库: 存储上传的图片信息
- 对象存储: 存储图片
- 用户认证:用户注册、登陆、登出
- API:提供API 供前端react调用
- 静态托管:托管此项目
主要逻辑代码
认证
async register(email, password) {
let { user, error } = await supabase.auth.signUp({ email, password })
console.log(error)
if (error) throw error
console.log(user)
return user
},
async login(email, password) {
const { data, error } = await supabase.auth.signInWithPassword({ email, password })
if (error) throw error
return data.user
},
async logout() {
const { error } = await supabase.auth.signOut()
if (error) throw error
}
图片上传
let { data, error } = await supabase.storage.from('images').upload(filename, file, {upsert: true})
if (error) {
console.log(error)
throw error
}
const { data: {publicUrl} } = supabase.storage.from('images').getPublicUrl(filename)
const { data: exit, error:error0 } = await supabase
.from('images')
.select()
.eq('filename', filename)
if (exit.length !== 0) {
const { error: error1 } = await supabase
.from('images')
.update({'url': publicUrl})
.eq('filename', filename)
if (error1) throw error1
} else {
const { data: dbData, error: dbError } = await supabase.from('images').insert([
{ filename, owner_id: user_id, url: publicUrl }
])
if (dbError) throw dbError
return dbData
}
const { data, error } = await supabase.from('images')
.select('id, filename, url, created_at')
.eq('owner_id', user_id)
.range(page * limit, (page + 1) * limit - 1)
.order('created_at', { ascending: false })
部署
BaaS准备
-
登录MemFire创建应用
-
创建数据库表 images
-
创建bucket images
-
配置bucket 访问策略,图简单可以直接设置允许所有用户可访问
开发
- 配置环境
vim .env
SUPABASE_URL="https://cokr4***********baseapi.memfiredb.com"
SUPABASE_KEY="eyJhbGciOiJIUz***************************************************************************c"
- 安装依赖
yarn install
- 本地启动
yarn start
部署
-
打包 yarn build cd build/ zip -rq -y index.zip ./
-
将包上传至静态托管
-
自定义域名
转载自:https://juejin.cn/post/7370275556904747017