系统设置-签名-功能完成

main
ysn 5 days ago
parent 1f47e64573
commit ab741ed4d1
  1. 85
      src/utils/requestMinio.js

@ -49,8 +49,14 @@ export function getMinioClient() {
*/
export async function uploadFile(bucket, objectName, file, metaData = {}, onProgress) {
return new Promise((resolve, reject) => {
// 检查 MinIO 客户端是否初始化
if (!s3Client) {
return reject(new Error('MinIO client not initialized'))
console.error('❌ MinIO client not initialized, attempting fallback upload...')
// 回退到使用 HTTP 表单上传
return fallbackUpload(bucket, objectName, file, metaData, onProgress)
.then(resolve)
.catch(reject)
}
console.log('=== MinIO Upload ===')
@ -90,12 +96,85 @@ export async function uploadFile(bucket, objectName, file, metaData = {}, onProg
})
})
.catch((err) => {
console.error('❌ Upload failed:', err)
reject(new Error('Upload failed: ' + err.message))
console.error('❌ AWS SDK Upload failed:', err)
console.log('Attempting fallback upload...')
// 尝试回退上传
fallbackUpload(bucket, objectName, file, metaData, onProgress)
.then(resolve)
.catch((fallbackErr) => {
reject(new Error('Upload failed: ' + fallbackErr.message))
})
})
})
}
/**
* 回退上传方法 - 使用 HTTP POST 表单上传
* @param {string} bucket - 存储桶名称
* @param {string} objectName - 对象名称
* @param {File} file - 文件对象
* @param {object} metaData - 元数据
* @param {function} onProgress - 进度回调
* @returns {Promise} - 上传结果
*/
async function fallbackUpload(bucket, objectName, file, metaData, onProgress) {
return new Promise((resolve, reject) => {
const config = window._globalConfig || {}
const uploadUrl = config.MINIO_UPLOAD_URL || '/api/upload/minio'
console.log('=== Fallback Upload ===')
console.log('Upload URL:', uploadUrl)
console.log('Bucket:', bucket)
console.log('Object:', objectName)
const formData = new FormData()
formData.append('bucket', bucket)
formData.append('objectName', objectName)
formData.append('file', file, file.name)
// 添加元数据
for (const key in metaData) {
formData.append('meta_' + key, metaData[key])
}
const xhr = new XMLHttpRequest()
xhr.upload.addEventListener('progress', (event) => {
if (event.lengthComputable && onProgress) {
const percent = Math.round((event.loaded / event.total) * 100)
onProgress(percent)
}
})
xhr.addEventListener('load', () => {
try {
const response = JSON.parse(xhr.responseText)
if (xhr.status >= 200 && xhr.status < 300) {
console.log('✅ Fallback upload successful:', response)
resolve({
bucket,
objectName: response.objectName || objectName,
etag: response.etag,
url: response.url || `${uploadUrl}/${bucket}/${objectName}`
})
} else {
reject(new Error(response.message || 'Upload failed'))
}
} catch (e) {
reject(new Error('Failed to parse response: ' + e.message))
}
})
xhr.addEventListener('error', () => {
reject(new Error('Network error during upload'))
})
xhr.open('POST', uploadUrl, true)
xhr.send(formData)
})
}
/**
* 下载文件获取预签名 URL
* @param {string} bucket - 存储桶名称

Loading…
Cancel
Save