|
|
@@ -438,7 +438,7 @@ export class TaroMinIOMultipartUploader {
|
|
|
}
|
|
|
|
|
|
// 读取文件片段
|
|
|
- private static async readFileSlice(filePath: string, start: number, end: number): Promise<ArrayBuffer> {
|
|
|
+ private static async readFileSlice(filePath: string, start: number, end: number): Promise<string | ArrayBuffer> {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
try {
|
|
|
const fs = Taro?.getFileSystemManager?.();
|
|
|
@@ -447,10 +447,7 @@ export class TaroMinIOMultipartUploader {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- const fileData = fs.readFileSync(filePath, undefined, {
|
|
|
- position: start,
|
|
|
- length: end - start
|
|
|
- });
|
|
|
+ const fileData = fs.readFileSync(filePath, undefined, start, end - start );
|
|
|
resolve(fileData);
|
|
|
} catch (error) {
|
|
|
reject(error);
|
|
|
@@ -549,50 +546,53 @@ export class TaroMinIOUploader {
|
|
|
|
|
|
formData['key'] = key;
|
|
|
|
|
|
- Taro?.getFileSystemManager?.()?.readFile({
|
|
|
- filePath,
|
|
|
- success: (fileData) => {
|
|
|
- const formDataObj = new FormData();
|
|
|
- Object.entries(formData).forEach(([k, value]) => {
|
|
|
- formDataObj.append(k, value);
|
|
|
- });
|
|
|
- formDataObj.append('file', new Blob([fileData.data]));
|
|
|
-
|
|
|
- Taro?.request?.({
|
|
|
- url: policy.uploadPolicy.host,
|
|
|
- method: 'POST',
|
|
|
- data: formDataObj,
|
|
|
- header: {
|
|
|
- 'Content-Type': 'multipart/form-data'
|
|
|
- },
|
|
|
- success: (res: any) => {
|
|
|
- if (res.statusCode >= 200 && res.statusCode < 300) {
|
|
|
- callbacks?.onProgress?.({
|
|
|
- stage: 'complete',
|
|
|
- message: '文件上传完成',
|
|
|
- progress: 100,
|
|
|
- timestamp: Date.now()
|
|
|
- });
|
|
|
- callbacks?.onComplete?.();
|
|
|
- resolve({
|
|
|
- fileUrl: `${policy.uploadPolicy.host}/${key}`,
|
|
|
- fileKey: key,
|
|
|
- bucketName: policy.uploadPolicy.bucket,
|
|
|
- fileId: result.file.id
|
|
|
- });
|
|
|
- } else {
|
|
|
- reject(new Error(`上传失败: ${res.statusCode}`));
|
|
|
- }
|
|
|
- },
|
|
|
- fail: (error: any) => {
|
|
|
- reject(new Error(`上传失败: ${error.errMsg}`));
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- fail: (error: any) => {
|
|
|
- reject(new Error(`读取文件失败: ${error.errMsg}`));
|
|
|
+ try {
|
|
|
+ const fileSystemManager = Taro?.getFileSystemManager?.();
|
|
|
+ if (!fileSystemManager) {
|
|
|
+ throw new Error('小程序环境不可用');
|
|
|
}
|
|
|
- }) || reject(new Error('小程序环境不可用'));
|
|
|
+
|
|
|
+ const fileData = fileSystemManager.readFileSync(filePath, 'binary');
|
|
|
+
|
|
|
+ const formDataObj = new FormData();
|
|
|
+ Object.entries(formData).forEach(([k, value]) => {
|
|
|
+ formDataObj.append(k, value);
|
|
|
+ });
|
|
|
+ formDataObj.append('file', new Blob([fileData]));
|
|
|
+
|
|
|
+ Taro?.request?.({
|
|
|
+ url: policy.uploadPolicy.host,
|
|
|
+ method: 'POST',
|
|
|
+ data: formDataObj,
|
|
|
+ header: {
|
|
|
+ 'Content-Type': 'multipart/form-data'
|
|
|
+ },
|
|
|
+ success: (res) => {
|
|
|
+ if (res.statusCode >= 200 && res.statusCode < 300) {
|
|
|
+ callbacks?.onProgress?.({
|
|
|
+ stage: 'complete',
|
|
|
+ message: '文件上传完成',
|
|
|
+ progress: 100,
|
|
|
+ timestamp: Date.now()
|
|
|
+ });
|
|
|
+ callbacks?.onComplete?.();
|
|
|
+ resolve({
|
|
|
+ fileUrl: `${policy.uploadPolicy.host}/${key}`,
|
|
|
+ fileKey: key,
|
|
|
+ bucketName: policy.uploadPolicy.bucket,
|
|
|
+ fileId: policy.file.id
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ reject(new Error(`上传失败: ${res.statusCode}`));
|
|
|
+ }
|
|
|
+ },
|
|
|
+ fail: (error: any) => {
|
|
|
+ reject(new Error(`上传失败: ${error.errMsg}`));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } catch (error: any) {
|
|
|
+ reject(new Error(`读取文件失败: ${error.message || error.errMsg}`));
|
|
|
+ }
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
@@ -869,6 +869,5 @@ export default {
|
|
|
getMultipartUploadPolicy,
|
|
|
uploadMinIOWithPolicy,
|
|
|
uploadMinIOWithTaroFile,
|
|
|
- uploadFromChoose,
|
|
|
uploadFromSelect
|
|
|
};
|