| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- import request from '@/utils/request'
- const signedUrlCache = new Map()
- /**
- * 判断是否为腾讯云COS私有存储预签名地址
- */
- export function isCosUrl(url) {
- if (!url || typeof url !== 'string') {
- return false
- }
- return url.includes('.myqcloud.com/') || url.includes('.cos.')
- }
- /**
- * 去除URL里预签名query参数,返回原始文件地址
- */
- export function stripSignedParams(url) {
- if (!url) {
- return url
- }
- const index = url.indexOf('?')
- return index > 0 ? url.substring(0, index) : url
- }
- /**
- * 转换存储地址为可访问链接,私有文件自动获取预签名地址
- */
- export function resolveAccessUrl(url) {
- const storedUrl = stripSignedParams(url)
- if (!storedUrl || !isCosUrl(storedUrl)) {
- return Promise.resolve(url)
- }
- if (signedUrlCache.has(storedUrl)) {
- return Promise.resolve(signedUrlCache.get(storedUrl))
- }
- return request({
- url: '/common/getSignedUrl',
- method: 'get',
- params: { url: storedUrl }
- }).then(res => {
- const accessUrl = (res.accessUrl || res.url || storedUrl)
- signedUrlCache.set(storedUrl, accessUrl)
- return accessUrl
- }).catch(() => storedUrl)
- }
- /**
- * 批量转换COS文件访问URL
- */
- export function resolveAccessUrls(urls) {
- if (!urls || !urls.length) {
- return Promise.resolve([])
- }
- return Promise.all(urls.map(url => resolveAccessUrl(url)))
- }
|