Files
t-admin/uni_modules/uni-media-library/uniCloud/cloudfunctions/uni-media-library-co/functions/image-library/internal-uploader.js
T
2025-06-13 21:16:12 +08:00

61 lines
1.5 KiB
JavaScript

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
}
}
}