Fix: COS cannot finish upload

This commit is contained in:
HFO4 2022-04-13 17:47:49 +08:00
parent 907f86550d
commit a682aac1c9
3 changed files with 42 additions and 2 deletions

View File

@ -9,6 +9,7 @@ import {
} from "../types";
import { OBJtoXML, request, requestAPI } from "../utils";
import {
COSUploadCallbackError,
COSUploadError,
CreateUploadSessionError,
DeleteUploadSessionError,
@ -370,6 +371,23 @@ export async function cosFormUploadChunk(
return res.data;
}
export async function cosUploadCallback(
sessionID: string,
cancel: CancelToken
): Promise<any> {
const res = await requestAPI<any>(`callback/cos/${sessionID}`, {
method: "get",
data: "{}",
cancelToken: cancel,
});
if (res.data.code != 0) {
throw new COSUploadCallbackError(res.data);
}
return res.data.data;
}
export async function upyunFormUploadChunk(
url: string,
file: File,

View File

@ -28,6 +28,7 @@ export enum UploaderErrorName {
FailedFinishOneDriveUpload = "FailedFinishOneDriveUpload",
S3LikeChunkUploadFailed = "S3LikeChunkUploadFailed",
S3LikeUploadCallbackFailed = "S3LikeUploadCallbackFailed",
COSUploadCallbackFailed = "COSUploadCallbackFailed",
COSPostUploadFailed = "COSPostUploadFailed",
UpyunPostUploadFailed = "UpyunPostUploadFailed",
QiniuChunkUploadFailed = "QiniuChunkUploadFailed",
@ -316,6 +317,18 @@ export class COSUploadError extends UploaderError {
}
}
// COS 无法完成上传回调
export class COSUploadCallbackError extends APIError {
constructor(response: Response<any>) {
super(UploaderErrorName.COSUploadCallbackFailed, "", response);
}
public Message(i18n: string): string {
this.message = `无法完成文件上传`;
return super.Message(i18n);
}
}
// Upyun 上传失败
export class UpyunUploadError extends UploaderError {
constructor(public response: UpyunError) {

View File

@ -1,5 +1,5 @@
import Base from "./base";
import { cosFormUploadChunk } from "../api";
import Base, { Status } from "./base";
import { cosFormUploadChunk, cosUploadCallback } from "../api";
export default class COS extends Base {
public upload = async () => {
@ -22,4 +22,13 @@ export default class COS extends Base {
this.cancelToken.token
);
};
protected async afterUpload(): Promise<any> {
this.transit(Status.finishing);
this.logger.info(`Sending COS upload callback...`);
return cosUploadCallback(
this.task.session!.sessionID,
this.cancelToken.token
);
}
}