162 lines
4.3 KiB
TypeScript
162 lines
4.3 KiB
TypeScript
import request from '@/utils/request'
|
|
|
|
/**
|
|
* 获取文件临时访问URL
|
|
* @param ossId 文件ID
|
|
* @param bucketPassword bucket访问密码
|
|
* @param expireSeconds 过期时间(秒),默认300秒
|
|
* @returns 临时访问URL
|
|
*/
|
|
export function getFileAccessUrl(ossId: number, bucketPassword?: string, expireSeconds: number = 300) {
|
|
return request({
|
|
url: `/resource/file/access/${ossId}`,
|
|
method: 'get',
|
|
params: {
|
|
bucketPassword,
|
|
expireSeconds
|
|
}
|
|
})
|
|
}
|
|
|
|
/**
|
|
* 批量获取文件临时访问URL
|
|
* @param ossIds 文件ID列表
|
|
* @param bucketPassword bucket访问密码
|
|
* @param expireSeconds 过期时间(秒),默认300秒
|
|
* @returns 文件ID与临时URL的映射
|
|
*/
|
|
export function getBatchFileAccessUrl(ossIds: number[], bucketPassword?: string, expireSeconds: number = 300) {
|
|
return request({
|
|
url: '/resource/file/access/batch',
|
|
method: 'post',
|
|
data: ossIds,
|
|
params: {
|
|
bucketPassword,
|
|
expireSeconds
|
|
}
|
|
})
|
|
}
|
|
|
|
/**
|
|
* 获取文件下载URL(带权限检查)
|
|
* @param ossId 文件ID
|
|
* @param bucketPassword bucket访问密码
|
|
* @param expireSeconds 过期时间(秒),默认300秒
|
|
* @returns 下载URL
|
|
*/
|
|
export function getFileDownloadUrl(ossId: number, bucketPassword?: string, expireSeconds: number = 300) {
|
|
return request({
|
|
url: `/resource/file/download/${ossId}`,
|
|
method: 'get',
|
|
params: {
|
|
bucketPassword,
|
|
expireSeconds
|
|
}
|
|
})
|
|
}
|
|
|
|
/**
|
|
* 获取文件预览URL(带权限检查)
|
|
* @param ossId 文件ID
|
|
* @param bucketPassword bucket访问密码
|
|
* @param expireSeconds 过期时间(秒),默认300秒
|
|
* @returns 预览URL
|
|
*/
|
|
export function getFilePreviewUrl(ossId: number, bucketPassword?: string, expireSeconds: number = 300) {
|
|
return request({
|
|
url: `/resource/file/preview/${ossId}`,
|
|
method: 'get',
|
|
params: {
|
|
bucketPassword,
|
|
expireSeconds
|
|
}
|
|
})
|
|
}
|
|
|
|
/**
|
|
* 安全下载文件(带bucket密码验证)
|
|
* @param ossId 文件ID
|
|
* @param fileName 文件名
|
|
* @param bucketPassword bucket访问密码
|
|
* @returns Promise<void>
|
|
*/
|
|
export async function secureDownloadFile(ossId: number, fileName: string, bucketPassword?: string) {
|
|
try {
|
|
// 获取临时下载URL
|
|
const { data: downloadUrl } = await getFileDownloadUrl(ossId, bucketPassword)
|
|
|
|
// 使用fetch下载文件
|
|
const response = await fetch(downloadUrl)
|
|
if (!response.ok) {
|
|
throw new Error('下载失败')
|
|
}
|
|
|
|
const blob = await response.blob()
|
|
|
|
// 创建下载链接
|
|
const url = URL.createObjectURL(blob)
|
|
const link = document.createElement('a')
|
|
link.href = url
|
|
link.download = fileName
|
|
document.body.appendChild(link)
|
|
link.click()
|
|
document.body.removeChild(link)
|
|
|
|
// 释放内存
|
|
URL.revokeObjectURL(url)
|
|
|
|
return Promise.resolve()
|
|
} catch (error) {
|
|
console.error('文件下载失败:', error)
|
|
return Promise.reject(error)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 安全预览文件(带bucket密码验证)
|
|
* @param ossId 文件ID
|
|
* @param contentType 文件类型
|
|
* @param bucketPassword bucket访问密码
|
|
* @returns Promise<string> 预览URL
|
|
*/
|
|
export async function securePreviewFile(ossId: number, contentType?: string, bucketPassword?: string) {
|
|
try {
|
|
// 获取临时预览URL
|
|
const { data: previewUrl } = await getFilePreviewUrl(ossId, bucketPassword)
|
|
|
|
// 根据文件类型选择预览方式
|
|
if (contentType?.startsWith('image/')) {
|
|
// 图片直接返回URL用于预览
|
|
return Promise.resolve(previewUrl)
|
|
} else {
|
|
// 其他文件在新窗口打开
|
|
window.open(previewUrl, '_blank')
|
|
return Promise.resolve(previewUrl)
|
|
}
|
|
} catch (error) {
|
|
console.error('文件预览失败:', error)
|
|
return Promise.reject(error)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取bucket访问密码提示
|
|
* @param bucketName bucket名称
|
|
* @returns 密码提示信息
|
|
*/
|
|
export function getBucketPasswordHint(bucketName: string) {
|
|
// 这里可以根据bucket名称返回相应的密码提示
|
|
// 例如:从配置中获取密码提示信息
|
|
return `请输入 ${bucketName} bucket 的访问密码`
|
|
}
|
|
|
|
/**
|
|
* 验证bucket密码格式
|
|
* @param password 密码
|
|
* @returns 验证结果
|
|
*/
|
|
export function validateBucketPassword(password: string): boolean {
|
|
// 简单的密码格式验证
|
|
return password && password.length >= 6
|
|
}
|