lex 1 rok pred
rodič
commit
66d1ce1975

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/assets/index-38ebe44b.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/assets/index-4e52ef91.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/assets/index-legacy-b8a45295.js


+ 8 - 0
dist/index.html

@@ -26,7 +26,11 @@
   <script src="./flexible.js"></script>
   <script src="./abc2svg/xml2abc.js"></script>
   <script src="./abc2svg/jquery-1.11.1.min.js"></script>
+<<<<<<< HEAD
   <script type="module" crossorigin src="./assets/index-38ebe44b.js"></script>
+=======
+  <script type="module" crossorigin src="./assets/index-4e52ef91.js"></script>
+>>>>>>> iteration-oss-upload
   <link rel="stylesheet" href="./assets/index-532dd713.css">
   <script type="module">import.meta.url;import("_").catch(()=>1);async function* g(){};window.__vite_is_modern_browser=true;</script>
   <script type="module">!function(){if(window.__vite_is_modern_browser)return;console.warn("vite: loading legacy chunks, syntax error above and the same error below should be ignored");var e=document.getElementById("vite-legacy-polyfill"),n=document.createElement("script");n.src=e.src,n.onload=function(){System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))},document.body.appendChild(n)}();</script>
@@ -37,7 +41,11 @@
   
   <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
   <script nomodule crossorigin id="vite-legacy-polyfill" src="./assets/polyfills-legacy-2011adef.js"></script>
+<<<<<<< HEAD
   <script nomodule crossorigin id="vite-legacy-entry" data-src="./assets/index-legacy-bc867e52.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
+=======
+  <script nomodule crossorigin id="vite-legacy-entry" data-src="./assets/index-legacy-b8a45295.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
+>>>>>>> iteration-oss-upload
 </body>
 
 </html>

+ 41 - 0
package-lock.json

@@ -20,8 +20,10 @@
         "abcjs": "^6.2.2",
         "clean-deep": "^3.4.0",
         "consola": "^2.15.3",
+        "cos-js-sdk-v5": "^1.4.21",
         "dayjs": "^1.11.7",
         "eventemitter3": "^5.0.0",
+        "file-saver": "^2.0.5",
         "howler": "^2.2.3",
         "html2canvas": "^1.4.1",
         "lodash": "^4.17.21",
@@ -2886,6 +2888,14 @@
         }
       }
     },
+    "node_modules/@xmldom/xmldom": {
+      "version": "0.8.10",
+      "resolved": "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
+      "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==",
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
     "node_modules/abcjs": {
       "version": "6.2.2",
       "resolved": "https://registry.npmmirror.com/abcjs/-/abcjs-6.2.2.tgz",
@@ -3307,6 +3317,14 @@
         "browserslist": "^4.21.9"
       }
     },
+    "node_modules/cos-js-sdk-v5": {
+      "version": "1.4.21",
+      "resolved": "https://registry.npmmirror.com/cos-js-sdk-v5/-/cos-js-sdk-v5-1.4.21.tgz",
+      "integrity": "sha512-6cR53IZF2o17uaPr8XJSMa+Q73P9pgDFD5IYGcIfJn06JJaK6hGX43nv5DJ17uQYmwQBIqNeZOF97I7ClrsNdA==",
+      "dependencies": {
+        "@xmldom/xmldom": "^0.8.6"
+      }
+    },
     "node_modules/css-line-break": {
       "version": "2.1.0",
       "resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz",
@@ -3668,6 +3686,11 @@
         "reusify": "^1.0.4"
       }
     },
+    "node_modules/file-saver": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz",
+      "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
+    },
     "node_modules/fill-range": {
       "version": "7.0.1",
       "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz",
@@ -7497,6 +7520,11 @@
         }
       }
     },
+    "@xmldom/xmldom": {
+      "version": "0.8.10",
+      "resolved": "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
+      "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw=="
+    },
     "abcjs": {
       "version": "6.2.2",
       "resolved": "https://registry.npmmirror.com/abcjs/-/abcjs-6.2.2.tgz",
@@ -7861,6 +7889,14 @@
         "browserslist": "^4.21.9"
       }
     },
+    "cos-js-sdk-v5": {
+      "version": "1.4.21",
+      "resolved": "https://registry.npmmirror.com/cos-js-sdk-v5/-/cos-js-sdk-v5-1.4.21.tgz",
+      "integrity": "sha512-6cR53IZF2o17uaPr8XJSMa+Q73P9pgDFD5IYGcIfJn06JJaK6hGX43nv5DJ17uQYmwQBIqNeZOF97I7ClrsNdA==",
+      "requires": {
+        "@xmldom/xmldom": "^0.8.6"
+      }
+    },
     "css-line-break": {
       "version": "2.1.0",
       "resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz",
@@ -8162,6 +8198,11 @@
         "reusify": "^1.0.4"
       }
     },
+    "file-saver": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz",
+      "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
+    },
     "fill-range": {
       "version": "7.0.1",
       "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz",

+ 1 - 0
package.json

@@ -20,6 +20,7 @@
     "abcjs": "^6.2.2",
     "clean-deep": "^3.4.0",
     "consola": "^2.15.3",
+    "cos-js-sdk-v5": "^1.4.21",
     "dayjs": "^1.11.7",
     "eventemitter3": "^5.0.0",
     "file-saver": "^2.0.5",

+ 236 - 0
src/utils/oss-file-upload.ts

@@ -0,0 +1,236 @@
+import request from "./request";
+// import axios from 'axios'
+import umiRequest from "umi-request";
+import COS from "cos-js-sdk-v5";
+export const ossSwitch = "tencent" as "ks3" | "tencent"; // 上传文件服务商
+const tencentBucket = "daya-online-1303457149";
+
+/**
+ * 管乐团 ktqy/
+ * 酷乐秀 klx/
+ * 课堂乐器 ktqy/
+ * 管乐迷 gym/
+ */
+
+// 定义一个cos 对象
+/**
+ * 获取上传文件签名
+ * @param params 上传对应参数
+ * { filename: fileName,
+     bucketName: props.bucketName,
+     postData: {
+      filename: fileName,
+      acl: 'public-read',
+      key: fileName,
+      unknowValueField: []
+    }}
+ * @param oss 服务商 ks3 tencent
+ * @returns ”{'signatur'':'',''kssAccessKeyI'':'',''policy': '' }“
+ */
+export const getUploadSign = async (params: any) => {
+  const { bucketName, filename, postData } = params;
+  const ossType = ossSwitch;
+  let bucket = bucketName;
+  let file = filename;
+  // const key = postData.key;
+  let tempPostData: any = {};
+  if (ossType === "tencent") {
+    bucket = tencentBucket;
+    file = "ktqy/" + filename;
+
+    tempPostData = {
+      key: "ktqy/" + postData.key,
+    };
+  } else {
+    tempPostData = postData;
+  }
+  return request.post("/open/getUploadSign", {
+    requestType: "json",
+    data: {
+      postData: tempPostData,
+      pluginName: ossType,
+      bucketName: bucket,
+      filename: file,
+    },
+    params: { pluginName: ossType },
+  });
+};
+
+/**
+ * 使用组件上传时,调用方法
+ * @param param0
+ */
+export const onFileUpload = ({ file, action, data, onProgress, onFinish, onError }: any) => {
+  if (ossSwitch === "ks3") {
+    const fileParams = {
+      policy: data.policy,
+      signature: data.signature,
+      key: data.key,
+      acl: "public-read",
+      KSSAccessKeyId: data.KSSAccessKeyId,
+      name: data.name,
+    } as any;
+    const formData = new FormData();
+    for (const key in fileParams) {
+      formData.append(key, fileParams[key]);
+    }
+    formData.append("file", data.file as File);
+    // axios
+    //   .post(action as string, formData, {
+    //     onUploadProgress: ({ progress }) => {
+    //       console.log(progress)
+    //       onProgress({ percent: Math.ceil((progress || 0) * 100) })
+    //     }
+    //   })
+    //   .then(() => {
+    //     file.url = action + data.key
+    //     onFinish()
+    //   })
+    //   .catch((error) => {
+    //     onError(error)
+    //   })
+    umiRequest(action as string, {
+      method: "POST",
+      data: formData,
+    })
+      .then(() => {
+        file.url = action + data.key;
+        onFinish();
+      })
+      .catch((error) => {
+        onError(error);
+      });
+  } else {
+    const cos = new COS({
+      Domain: "https://oss.dayaedu.com",
+      Protocol: "https",
+      // getAuthorization 必选参数
+      getAuthorization: async (options, callback: any) => {
+        callback({ Authorization: data.signature });
+      },
+    });
+    cos
+      .uploadFile({
+        Bucket: tencentBucket /* 填写自己的 bucket,必须字段 */,
+        Region: "ap-nanjing" /* 存储桶所在地域,必须字段 */,
+        Key: `ktqy/${data.name}`,
+        /* 存储在桶里的对象键(例如:1.jpg,a/b/test.txt,图片.jpg)支持中文,必须字段 */
+        Body: data.file.file, // 上传文件对象
+        SliceSize: 1024 * 1024 * 500 /* 触发分块上传的阈值,超过5MB使用分块上传,小于5MB使用简单上传。可自行设置,非必须 */,
+        onProgress: function (progressData) {
+          onProgress({ percent: Math.ceil((progressData.percent || 0) * 100) });
+        },
+      })
+      .then((res: any) => {
+        // file.url = 'https://' + res.Location;
+        if (res.Location?.indexOf("http") >= 0) {
+          file.url = res.Location;
+        } else {
+          file.url = "https://" + res.Location;
+        }
+        onFinish();
+      })
+      .catch((error) => {
+        console.log(error, "error");
+        onError();
+      });
+  }
+};
+
+export const onOnlyFileUpload = async (action: string, params: any) => {
+  if (ossSwitch === "ks3") {
+    const fileParams = {
+      policy: params.policy,
+      signature: params.signature,
+      key: params.key,
+      acl: "public-read",
+      KSSAccessKeyId: params.KSSAccessKeyId,
+      name: params.name,
+    } as any;
+    const formData = new FormData();
+    for (const key in fileParams) {
+      formData.append(key, fileParams[key]);
+    }
+    formData.append("file", params.file as File);
+    let file = "";
+    let errorObj: any = null;
+    // await axios
+    //   .post(action as string, formData, {
+    //     // onUploadProgress: ({ progress }) => {
+    //     //   console.log(progress);
+    //     //   onProgress({ percent: Math.ceil((progress || 0) * 100) });
+    //     // }
+    //   })
+    //   .then(() => {
+    //     file = action + params.key
+    //   })
+    //   .catch((error) => {
+    //     // onError(error);
+    //     errorObj = error
+    //     // throw new Error(error);
+    //   })
+    await umiRequest(action as string, {
+      method: "POST",
+      data: formData,
+    })
+      .then(() => {
+        file = action + params.key;
+      })
+      .catch((error) => {
+        errorObj = error;
+      });
+    if (file) {
+      return file;
+    } else {
+      throw new Error(errorObj);
+    }
+    return file;
+  } else {
+    let file = "";
+    let errorObj: any = null;
+    console.log(params, "params");
+    const cos = new COS({
+      Domain: "https://oss.dayaedu.com",
+      // getAuthorization 必选参数
+      getAuthorization: async (options, callback: any) => {
+        callback({ Authorization: params.signature });
+      },
+    });
+
+    // http://daya-online-1303457149.cos.ap-nanjing.myqcloud.com/ktqy
+    // http://daya-online-1303457149.cos.ap-nanjing.myqcloud.com/ktqy
+    await cos
+      .uploadFile({
+        Bucket: tencentBucket /* 填写自己的 bucket,必须字段 */,
+        Region: "ap-nanjing" /* 存储桶所在地域,必须字段 */,
+        Key: `ktqy/${params.name}`,
+        /* 存储在桶里的对象键(例如:1.jpg,a/b/test.txt,图片.jpg)支持中文,必须字段 */
+        Body: params.file, // 上传文件对象
+        SliceSize: 1024 * 1024 * 500 /* 触发分块上传的阈值,超过5MB使用分块上传,小于5MB使用简单上传。可自行设置,非必须 */,
+        // onProgress: function (progressData) {
+        //   onProgress({ percent: Math.ceil((progressData.percent || 0) * 100) });
+        // }
+      })
+      .then((res: any) => {
+        // file.url = 'https://' + res.Location;
+        // file = 'https://' + res.Location;
+        if (res.Location?.indexOf("http") >= 0) {
+          file = res.Location;
+        } else {
+          file = "https://" + res.Location;
+        }
+        // onFinish();
+      })
+      .catch((error) => {
+        // console.log(error, 'error');
+        // onError();
+        // throw new Error(error);
+        errorObj = error;
+      });
+    if (file) {
+      return file;
+    } else {
+      throw new Error(errorObj);
+    }
+  }
+};

+ 55 - 43
src/utils/uploadFile.ts

@@ -1,59 +1,71 @@
 import axios from "axios";
 import request from "./request";
+import { getUploadSign, onOnlyFileUpload } from "./oss-file-upload";
 const bucketName = "gyt";
 const ACL = "public-read";
 const ossUploadUrl = `https://${bucketName}.ks3-cn-beijing.ksyuncs.com/`;
 
 const policy = (params: object) => {
-	return request.post('/open/getUploadSign', {
-		data: params,
-    requestType: 'json',
-	});
+  return request.post("/open/getUploadSign", {
+    data: params,
+    requestType: "json",
+  });
 };
 
 const getPolicy = async (fileName: string) => {
-	const obj = {
-		filename: fileName,
-		bucketName: bucketName,
-		postData: {
-			filename: fileName,
-			acl: ACL,
-			key: fileName,
-		},
-	};
-	// console.log("🚀 ~ obj:", obj)
-	const { data } = await policy(obj);
-	// console.log(data);
-	return data;
+  const obj = {
+    filename: fileName,
+    bucketName: bucketName,
+    postData: {
+      filename: fileName,
+      acl: ACL,
+      key: fileName,
+    },
+  };
+  // console.log("🚀 ~ obj:", obj)
+  // const { data } = await policy(obj);
+  const { data } = await getUploadSign(obj);
+  // console.log(data);
+  return data;
 };
 const upload = async (policy: any, fileName: string, file: any, progress?: Function) => {
-	const url = ossUploadUrl + fileName;
-	const formData = new FormData();
-	formData.append("policy", policy.policy);
-	formData.append("signature", policy.signature);
-	formData.append("key", fileName);
-	formData.append("KSSAccessKeyId", policy.kssAccessKeyId);
-	formData.append("acl", ACL);
-	formData.append("name", fileName);
-	formData.append("file", file);
-	const res = await axios({
-		url: ossUploadUrl,
-		method: "post",
-		headers: {
-			"Content-Type": "multipart/form-data",
-		},
-		data: formData,
-		onUploadProgress: (progressEvent: any) => {
-			const complete = ((progressEvent.loaded / progressEvent.total) * 100) | 0;
-			progress && progress(complete);
-		},
-	} as any);
-	return url;
+  // const url = ossUploadUrl + fileName;
+  // const formData = new FormData();
+  // formData.append("policy", policy.policy);
+  // formData.append("signature", policy.signature);
+  // formData.append("key", fileName);
+  // formData.append("KSSAccessKeyId", policy.kssAccessKeyId);
+  // formData.append("acl", ACL);
+  // formData.append("name", fileName);
+  // formData.append("file", file);
+  // const res = await axios({
+  //   url: ossUploadUrl,
+  //   method: "post",
+  //   headers: {
+  //     "Content-Type": "multipart/form-data",
+  //   },
+  //   data: formData,
+  //   onUploadProgress: (progressEvent: any) => {
+  //     const complete = ((progressEvent.loaded / progressEvent.total) * 100) | 0;
+  //     progress && progress(complete);
+  //   },
+  // } as any);
+  // return url;
+  const fileParams = {
+    policy: policy.policy,
+    signature: policy.signature,
+    key: fileName,
+    KSSAccessKeyId: policy.kssAccessKeyId,
+    acl: ACL,
+    name: fileName,
+    file: file,
+  };
+  return await onOnlyFileUpload(ossUploadUrl, fileParams);
 };
 
 export const api_uploadFile = async (file: any, fileName: string, progress?: Function) => {
-	const policy = await getPolicy(fileName);
-	const url = await upload(policy, fileName, file, progress && progress);
-	console.log("🚀 ~ url:", url);
-	return url;
+  const policy = await getPolicy(fileName);
+  const url = await upload(policy, fileName, file, progress && progress);
+  console.log("🚀 ~ url:", url);
+  return url;
 };

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov