浏览代码

使用原生手机拍照,优化企业微信拍照模糊问题

zhujindu 8 月之前
父节点
当前提交
98f4a66449
共有 2 个文件被更改,包括 36 次插入3 次删除
  1. 1 1
      src/utils/ali-oss.js
  2. 35 2
      src/utils/uploadAliOss.js

+ 1 - 1
src/utils/ali-oss.js

@@ -13,7 +13,7 @@ const client = new OSS({
   accessKeyId: process.env.VUE_APP_OSS_ACCESS_KEY_ID,
   accessKeySecret: process.env.VUE_APP_OSS_ACCESS_KEY_SECRET,
   // yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
-  region: 'oss-cn-shanghai',
+  region: 'cdn-svs-test.nipponpaint.com.cn',
   authorizationV4: true,
   // yourBucketName填写Bucket名称。
   bucket: 'svs-test',

+ 35 - 2
src/utils/uploadAliOss.js

@@ -1,4 +1,5 @@
-import client from '@/utils/ali-oss';
+const OSS = require('ali-oss');
+import { restartProcess } from '@/api/index';
 
 // 自定义请求头
 const headers = {
@@ -32,12 +33,44 @@ const progress = (p, _checkpoint) => {
   // 分片上传的断点信息。
   console.log(_checkpoint);
 };
+
+let credentials = null;
 async function uploadAliOss(base64, filename) {
+  if (isCredentialsExpired(credentials)) {
+    // 获取 STS token.
+    const response = await restartProcess();
+    if (!response.ok) {
+      // 处理错误的HTTP状态码。
+      throw new Error(`获取STS令牌失败: ${response.status} ${response.statusText}`);
+    }
+    credentials = await response.json();
+  }
+  const client = new OSS({
+    region: 'cdn-svs-test.nipponpaint.com.cn',
+    // yourBucketName填写Bucket名称。
+    bucket: 'svs-test',
+    accessKeyId: credentials.AccessKeyId,
+    accessKeySecret: credentials.AccessKeySecret,
+    stsToken: credentials.SecurityToken,
+  });
+  let file = dataURLtoFile(base64, filename);
   try {
-    const result = await client.put(filename, new Buffer.from(base64), { headers });
+    const result = await client.put(filename, file, { headers });
     console.log(result);
   } catch (e) {
     console.log(e);
   }
 }
+/**
+ * 判断临时凭证是否到期。
+ **/
+function isCredentialsExpired(credentials) {
+  if (!credentials) {
+    return true;
+  }
+  const expireDate = new Date(credentials.Expiration);
+  const now = new Date();
+  // 如果有效期不足一分钟,视为过期。
+  return expireDate.getTime() - now.getTime() <= 60000;
+}
 export default uploadAliOss;