This commit is contained in:
c
2025-03-12 20:11:03 +08:00
commit e65b262527
1179 changed files with 148205 additions and 0 deletions
@@ -0,0 +1,48 @@
async function deleteMedia (params) {
const {mediaIds = [], deleteOriginalFile = true} = params
const db = uniCloud.database()
if (mediaIds.length <= 0) {
return {
errCode: 0
}
}
const mediaList = await db.collection('uni-media-library').where({
_id: db.command.in(mediaIds)
}).get()
if (!mediaList.data || mediaList.data.length <= 0) {
return {
errCode: 0
}
}
const mediaFileIds = mediaList.data.filter(item => item.src).map(item => item.src)
const coverFileIds = mediaList.data.filter(item => item.type === 'video' && item.cover).map(item => item.cover)
try {
await Promise.all([
// 删除云数据库中的记录
db.collection('uni-media-library').where({
_id: db.command.in(mediaIds)
}).remove(),
// 删除云存储中的文件
deleteOriginalFile && mediaFileIds.length && uniCloud.deleteFile({
fileList: mediaFileIds
}),
// 删除云存储中的文件
deleteOriginalFile && coverFileIds.length && uniCloud.deleteFile({
fileList: coverFileIds
})
])
} catch (e) {
console.log('删除云存储图片失败', e)
}
return {
errCode: 0
}
}
module.exports = deleteMedia
@@ -0,0 +1,14 @@
const config = require('../../common/config')
async function getProviders() {
return {
errCode: 0,
data: config.imageLibraryProviders.map(item => ({
provider: item.provider,
name: item.name,
website: item.website,
}))
}
}
module.exports = getProviders
@@ -0,0 +1,60 @@
const fs = require('fs')
// const stream = require("stream")
const config = require('../../common/config')
module.exports = async function (params) {
const {url = '', id, provider = ''} = params
const cloudInfo = uniCloud.getCloudInfos()[0]
const isAliyun = cloudInfo.provider === 'aliyun'
const imageLibraryProviders = config.imageLibraryProviders || []
const providerConfig = imageLibraryProviders.find(item => item.provider === provider)
let imageDetail = {
fileType: 'jpeg'
}
if (id && providerConfig) {
const entry = require(providerConfig.entryFilePath)
try {
const detail = await entry.detail({
id
}, providerConfig.options)
imageDetail = Object.assign(imageDetail, detail)
} catch (e) {
return {
errCode: 500,
errMsg: e.message
}
}
}
const response = await uniCloud.httpclient.request(url, {
streaming: !isAliyun,
timeout: 600000
})
if (response.status !== 200) {
return {
errCode: response.status,
errMsg: '上传失败'
}
}
// 未获取到文件大小时,尝试从响应头中获取
if (!imageDetail.size && response.headers['content-length']) {
imageDetail.size = Number(response.headers['content-length'])
}
const res = await uniCloud.uploadFile({
cloudPath: `uni-media-library/${Date.now()}.${imageDetail.fileType}`,
fileContent: isAliyun ? response.data: response.res
})
return {
errCode: 0,
data: {
fileID: res.fileID,
detail: imageDetail
}
}
}
@@ -0,0 +1,33 @@
const config = require('../../common/config')
module.exports = async function (params) {
const {keyword = '', page = 1, pageSize = 20, provider = ''} = params
const imageLibraryProviders = config.imageLibraryProviders || []
const providerConfig = imageLibraryProviders.find(item => item.provider === provider)
if (!providerConfig) {
return {
errCode: 400,
errMsg: `Provider ${provider} is not found`
}
}
const entry = require(providerConfig.entryFilePath)
try {
const res = await entry.search({
keyword,
page,
pageSize
}, providerConfig.options)
return {
errCode: 0,
data: res
}
} catch (e) {
return {
errCode: 500,
errMsg: e.message
}
}
}
@@ -0,0 +1,7 @@
module.exports = {
report: require('./report'),
deleteMedia: require('./delete-media'),
getImageLibraryProviders: require('./image-library/get-providers'),
searchImageLibrary: require('./image-library/search'),
uploadImage: require('./image-library/internal-uploader'),
}
@@ -0,0 +1,38 @@
const db = uniCloud.database()
async function report (params) {
const {
src,
cover,
type,
originalName,
fileType,
size,
resolution = {},
duration,
uploadUser,
description,
alt
} = params
await db.collection('uni-media-library').add({
src,
cover,
type,
originalName,
fileType,
size,
resolution,
duration,
uploadUser,
description,
alt,
createDate: Date.now()
})
return {
errCode: 0
}
}
module.exports = report