Browse Source

Merge branch 'beta' of https://git.cocorobo.cn/CocoRoboLabs/CocoRoboDesktop into beta

lsc 11 tháng trước cách đây
mục cha
commit
3b9f9fa39b
1 tập tin đã thay đổi với 26 bổ sung30 xóa
  1. 26 30
      js/Common/awsupload.js

+ 26 - 30
js/Common/awsupload.js

@@ -1,6 +1,6 @@
 let bucket; //aws上传接口
 let bucketname = "ccrb"; //桶
-const partsize = 1 * 1024 * 1024; // 1MB
+const partsize = 5 * 1024 * 1024; // 5MB
 
 //--------------------------分断上传保证稳定性
 //初始化上传
@@ -21,10 +21,12 @@ async function init() {
 }
 
 //初始化上传入口
-async function initMultipartUpload(file, folderid) {
+async function initMultipartUpload(key, file) {
     const params = {
         Bucket: bucketname,
-        Key: folderid + "/" + file.name
+        Key: key,
+        ContentType: file.type,
+        "ACL": "public-read"
     };
     //创建一个续传通道
     const data = await bucket.createMultipartUpload(params).promise();
@@ -37,31 +39,23 @@ async function uploadPart(file, keyname, uploadid, pn, start, end) {
     var params = {
         Bucket: bucketname,
         Key: keyname,
-        ContentType: file.type,
         PartNumber: pn,
         UploadId: uploadid,
-        Body: file.slice(start, end),
-        "Access-Control-Allow-Credentials": "*",
-        ACL: "public-read",
+        Body: file.slice(start, end)
     };
-    const result = await bucket.uploadPart(params).promise()
-        .then((data) => {
-            return { ETag: result.ETag, PartNumber: pn };
-        })
-        .catch((err) => {
-            return err;
-        });
+    const result = await bucket.uploadPart(params).promise();
+    return { ETag: result.ETag, PartNumber: pn };
 }
 
 // 完成分块上传
-async function completeMultipartUpload(parts, keyname) {
+async function completeMultipartUpload(parts, keyname, uploadid) {
     const params = {
         Bucket: bucketname,
         Key: keyname,
         MultipartUpload: { Parts: parts },
         UploadId: uploadid
     };
-    await bucket.completeMultipartUpload(params).promise();
+    return await bucket.completeMultipartUpload(params).promise();
 }
 
 //中止分块上传
@@ -82,7 +76,7 @@ async function uploadFile(file, folderid) {
     try {
         init(); // 初始化aws接口
         // 初始化分块上传
-        uploadid = await initMultipartUpload(file, folderid);
+        uploadid = await initMultipartUpload(keyname, file);
         // 分块上传文件
         let parts = [];
         let start = 0;
@@ -95,7 +89,7 @@ async function uploadFile(file, folderid) {
             parts.push(await uploadPart(file, keyname, uploadid, i, start, end));
         }
         // 完成分块上传
-        await completeMultipartUpload(parts, uploadid);
+        await completeMultipartUpload(parts, keyname, uploadid);
         return uploadid;
     }
     catch (error) {
@@ -151,24 +145,23 @@ async function awsuploadpart(filestate, file, uploadid, parts, key) {
         return { PartNumber: _.PartNumber, ETag: _.ETag };
     });
     // 分块上传文件
-    let parts = [];
     let uploadpart;
     let start = 0;
     let end = 0;
-    let len = Math.ceil(file.length / partsize); //循环的长度
+    let len = Math.ceil(file.size / partsize); //循环的长度
     if (partarr.length) {
         filestate.status = "processing";
-        filestate.percent = parseInt((completeparts.length * 100) / count);
+        filestate.percent = parseInt((completeparts.length * 100) / len);
     }
     //循环上传
     for (let i = 0; i < len; i++) {
         start = i * partsize;
         end = (i + 1) * partsize;
         if (!partarr.includes(i)) {
-            uploadpart = await uploadPart(file, key, uploadid, i, start, end);
+            uploadpart = await uploadPart(file, key, uploadid, i + 1, start, end);
             if (uploadpart.ETag != null) {
                 completeparts.push(uploadpart);
-                filestate.percent = parseInt((completeparts.length * 100) / count);
+                filestate.percent = parseInt((completeparts.length * 100) / len);
             }
 
             else {
@@ -178,7 +171,9 @@ async function awsuploadpart(filestate, file, uploadid, parts, key) {
         }
     }
     //提交上传成功信息
-    await completeMultipartUpload(completeparts, uploadid);
+    var data = await completeMultipartUpload(completeparts, key, uploadid);
+    filestate.status = "success";
+    return data;
 }
 
 //上传的接口
@@ -203,12 +198,14 @@ async function awsupload(file, folderid, filestate) {
                 //如果已经部分存在,那么直接在节点续传
                 if (uploadid) {
                     //断点续传
-                    awsuploadpart(filestate, file, uploadid, partsinfo.Parts, key);
+                    var data = await awsuploadpart(filestate, file, uploadid, partsinfo.Parts, key);
+                    return { data, key, uploadid };
                 }
                 //不存在,上传新的
                 else {
-                    const uploadid = await initMultiPartUpload(bucket, params); //初始化文件上传
-                    awsuploadpart(filestate, file, uploadid, [], key);
+                    const uploadid = await initMultipartUpload(key, file); //初始化文件上传
+                    var data = await awsuploadpart(filestate, file, uploadid, [], key);
+                    return { data, key, uploadid };
                 }
             }
             //如果已经上传成功了,那么直接返回状态百分百
@@ -216,6 +213,7 @@ async function awsupload(file, folderid, filestate) {
                 //data存在,上传成功
                 filestate.percent = 100;
                 filestate.status = "success";
+                return { data, key };
             }
         });
     }
@@ -223,6 +221,4 @@ async function awsupload(file, folderid, filestate) {
         filestate.status = "error";
         console.log(err);
     }
-    return filestate;
-}
-
+}