61 lines
1.5 KiB
JavaScript
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
|
|
}
|
|
}
|
|
}
|