diff --git a/package.json b/package.json index b911cd6..b3d5e33 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,8 @@ "vue-json-pretty": "2.4.0", "vue-router": "4.4.5", "vue-types": "5.1.3", - "vxe-table": "4.5.22" + "vxe-table": "4.5.22", + "hash-wasm": "^4.12.0" }, "devDependencies": { "@eslint/js": "9.15.0", diff --git a/src/components/PartUpload/index.vue b/src/components/PartUpload/index.vue new file mode 100644 index 0000000..d1bd99b --- /dev/null +++ b/src/components/PartUpload/index.vue @@ -0,0 +1,104 @@ + + + diff --git a/src/utils/partUpload.ts b/src/utils/partUpload.ts new file mode 100644 index 0000000..b524264 --- /dev/null +++ b/src/utils/partUpload.ts @@ -0,0 +1,74 @@ +import axios from 'axios'; + +export const httpInstance = axios.create({ + baseURL: '/api', + timeout: 10000 +}); + +export interface MultipartBo { + + /** + * 分片类型(必传) + */ + ossStatus: 'initiate' | 'upload' | 'query' | 'complete'; + + /** + * 文件原名(分片初始化的时候使用) + */ + originalName?: string; + + /** + * 用于分片上传任务的 Upload ID + * 在初始化分片上传时获取,并在后续的分片上传和完成上传过程中使用 + */ + uploadId?: string; + + /** + * 分片编号(从1开始递增) + */ + partNumber?: number; + + /** + * 内容的 MD5 摘要 + * initiate初始化需要第一片的md5值(或者直接计算整体的md5)用来判断断点续传,以及秒传 + */ + md5Digest?: string; + + /** + * 最大返回的分片数(默认为1000,最大值1000) + * 最多分片一万,一次性返回会造成前端性能问题,需要前端多次校验 + */ + maxParts?: number; + + /** + * 分片编号的标记,用于分页查询(默认为0,表示从第一个分片开始查询) + */ + partNumberMarker?: number; + + partUploadList?: PartUploadList[]; +} + +export interface PartUploadList { + + /** + * 分片编号(从1开始递增) + */ + partNumber: number; + + /** + * 从上传部分的内容生成的实体标签 + */ + entryTag: string; +} + +export interface Data { + filename: string; + originalName: string; + md5Digest: string; + uploadId: string; + suffix: string; +} + +export function multipartUpload(multipartBo: MultipartBo) { + return httpInstance.post('/resource/oss/multipart', multipartBo); +}