|
|
@@ -1,5 +1,5 @@
|
|
|
import * as FileApi from '@/api/infra/file'
|
|
|
-import CryptoJS from 'crypto-js'
|
|
|
+// import CryptoJS from 'crypto-js'
|
|
|
import { UploadRawFile, UploadRequestOptions } from 'element-plus/es/components/upload/src/upload'
|
|
|
import axios from 'axios'
|
|
|
|
|
|
@@ -10,7 +10,7 @@ export const getUploadUrl = (): string => {
|
|
|
return import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/infra/file/upload'
|
|
|
}
|
|
|
|
|
|
-export const useUpload = () => {
|
|
|
+export const useUpload = (directory?: string) => {
|
|
|
// 后端上传地址
|
|
|
const uploadUrl = getUploadUrl()
|
|
|
// 是否使用前端直连上传
|
|
|
@@ -22,7 +22,7 @@ export const useUpload = () => {
|
|
|
// 1.1 生成文件名称
|
|
|
const fileName = await generateFileName(options.file)
|
|
|
// 1.2 获取文件预签名地址
|
|
|
- const presignedInfo = await FileApi.getFilePresignedUrl(fileName)
|
|
|
+ const presignedInfo = await FileApi.getFilePresignedUrl(fileName, directory)
|
|
|
// 1.3 上传文件(不能使用 ElUpload 的 ajaxUpload 方法的原因:其使用的是 FormData 上传,Minio 不支持)
|
|
|
return axios
|
|
|
.put(presignedInfo.uploadUrl, options.file, {
|
|
|
@@ -32,7 +32,7 @@ export const useUpload = () => {
|
|
|
})
|
|
|
.then(() => {
|
|
|
// 1.4. 记录文件信息到后端(异步)
|
|
|
- createFile(presignedInfo, fileName, options.file)
|
|
|
+ createFile(presignedInfo, options.file)
|
|
|
// 通知成功,数据格式保持与后端上传的返回结果一致
|
|
|
return { data: presignedInfo.url }
|
|
|
})
|
|
|
@@ -40,7 +40,7 @@ export const useUpload = () => {
|
|
|
// 模式二:后端上传
|
|
|
// 重写 el-upload httpRequest 文件上传成功会走成功的钩子,失败走失败的钩子
|
|
|
return new Promise((resolve, reject) => {
|
|
|
- FileApi.updateFile({ file: options.file })
|
|
|
+ FileApi.updateFile({ file: options.file, directory })
|
|
|
.then((res) => {
|
|
|
if (res.code === 0) {
|
|
|
resolve(res)
|
|
|
@@ -67,11 +67,11 @@ export const useUpload = () => {
|
|
|
* @param name 文件名称
|
|
|
* @param file 文件
|
|
|
*/
|
|
|
-function createFile(vo: FileApi.FilePresignedUrlRespVO, name: string, file: UploadRawFile) {
|
|
|
+function createFile(vo: FileApi.FilePresignedUrlRespVO, file: UploadRawFile) {
|
|
|
const fileVo = {
|
|
|
configId: vo.configId,
|
|
|
url: vo.url,
|
|
|
- path: name,
|
|
|
+ path: vo.path,
|
|
|
name: file.name,
|
|
|
type: file.type,
|
|
|
size: file.size
|
|
|
@@ -85,14 +85,15 @@ function createFile(vo: FileApi.FilePresignedUrlRespVO, name: string, file: Uplo
|
|
|
* @param file 要上传的文件
|
|
|
*/
|
|
|
async function generateFileName(file: UploadRawFile) {
|
|
|
- // 读取文件内容
|
|
|
- const data = await file.arrayBuffer()
|
|
|
- const wordArray = CryptoJS.lib.WordArray.create(data)
|
|
|
- // 计算SHA256
|
|
|
- const sha256 = CryptoJS.SHA256(wordArray).toString()
|
|
|
- // 拼接后缀
|
|
|
- const ext = file.name.substring(file.name.lastIndexOf('.'))
|
|
|
- return `${sha256}${ext}`
|
|
|
+ // // 读取文件内容
|
|
|
+ // const data = await file.arrayBuffer()
|
|
|
+ // const wordArray = CryptoJS.lib.WordArray.create(data)
|
|
|
+ // // 计算SHA256
|
|
|
+ // const sha256 = CryptoJS.SHA256(wordArray).toString()
|
|
|
+ // // 拼接后缀
|
|
|
+ // const ext = file.name.substring(file.name.lastIndexOf('.'))
|
|
|
+ // return `${sha256}${ext}`
|
|
|
+ return file.name
|
|
|
}
|
|
|
|
|
|
/**
|