Browse Source

移动端s3配置

cxmo 1 year ago
parent
commit
1f3da842e4
4 changed files with 98 additions and 4 deletions
  1. 1 0
      index.html
  2. 3 0
      public/aws-sdk.min.js
  3. 62 1
      src/hooks/useUploadFileToOSS.js
  4. 32 3
      src/views/ppt/hooks/usePPTPublish.js

+ 1 - 0
index.html

@@ -13,5 +13,6 @@
     <script src="/jquery-3.6.0.min.js"></script>
     <script type='text/javascript' src='/froala_editor.pkgd.min.js'></script>
     <script type='text/javascript' src='/froala_editor_zh_cn.js'></script>
+    <script type='text/javascript' src="/aws-sdk.min.js"></script>
   </body>
 </html>

File diff suppressed because it is too large
+ 3 - 0
public/aws-sdk.min.js


+ 62 - 1
src/hooks/useUploadFileToOSS.js

@@ -148,7 +148,68 @@ export async function useUploadToMinIO (file, fileName, options = {}){
         console.error(error);
         if (error.name !== "cancel") {
             //不是取消上传的则给错误提示
-            this.$message.warning("上传失败,请刷新重试");
+            console.log("上传失败,请刷新重试");
         }
     }
+}
+
+//上传到s3
+export async function useUploadToS3(file,fileName,options={}){
+    const res = await apiGetOSSSign({StorageSource:3})
+    if(res.Ret!==200){
+        console.log("获取s3前面错误,res.Ret="+res.Ret)
+        return
+    }
+    const { 
+        Endpoint,
+        AccessKeyId,
+        AccessKeySecret,
+        Port,
+        Bucketname,
+        RegionId,
+        S3ForceStyle,
+        S3Protocol
+    } = res.Data
+    const s3Client = new window.AWS.S3({
+        apiVersion: '2006-03-01',
+        endpoint:Endpoint,
+        region:RegionId,
+        s3ForcePathStyle:S3ForceStyle,
+        credentials:{
+            accessKeyId:AccessKeyId,
+            secretAccessKey:AccessKeySecret,
+        }
+    })
+    try {
+        let reader = new FileReader();
+        reader.readAsArrayBuffer(file);
+        reader.onloadend = function (e) {
+            const dataurl = e.target.result;
+            let bufferStream = new stream.PassThrough();
+            bufferStream.end(Buffer.from(dataurl))
+            //upload会返回完整路径
+            s3Client.upload({
+                Bucket: Bucketname,
+                ContentType: file.type || 'application/octet-stream',
+                Body: file,
+                ACL: "public-read",
+                Key: fileName
+            }, function (err, data) {
+                if (err) {
+                    console.log("Error! err =====> ", err);
+                    throw new Error("上传到s3失败!")
+                } else {
+                    let url = data['Location'];
+                    console.log("Successfully uploaded! URL =====> ", url);
+                    return url
+                }
+            });
+        }
+      } catch (error) {
+        console.error(error);
+        if (error.name !== "cancel") {
+          //不是取消上传的则给错误提示
+          console.log("上传失败,请刷新重试");
+        }
+      }
 }

+ 32 - 3
src/views/ppt/hooks/usePPTPublish.js

@@ -6,7 +6,7 @@ import pptxgen from "pptxgenjs";
 import { parse } from "himalaya";
 import _ from 'lodash'
 import {pptLayout,pptSlideMaster,pptSlideMasterEn,modelConfig} from '../utils/config'
-import {useUploadFileToOSS,useUploadToMinIO} from '@/hooks/useUploadFileToOSS'
+import {useUploadFileToOSS,useUploadToMinIO,useUploadToS3} from '@/hooks/useUploadFileToOSS'
 import {getPPTConfig} from './createPPTContent'
 import {usePublicSettingStore} from '@/store/modules/publicSetting'
 import moment from 'moment'
@@ -529,6 +529,34 @@ async function handleUploadToMinIO(data){
     }
     handlePublishPPT(url)
 }
+async function uploadFileDirect(data){
+    const loading=showLoadingToast({
+        message: "上传中...",
+        duration: 0,
+        forbidClick: true,
+      })
+    const t=new Date()
+	const month=moment(t).format('YYYYMM')
+	const day=moment(t).format('YYYYMMDD')
+	const temName=`ppt/${month}/${day}/${createRandomCode(32)}.pptx`
+	console.log('文件名',temName);
+    const objectStorageType = publicSettingStore.publicSetting.ObjectStorageClient||'oss'
+    const uploadMap = {
+        'oss':useUploadFileToOSS,
+        'minio':useUploadToMinIO,
+        's3':useUploadToS3
+    }
+    const url = await uploadMap[objectStorageType](data,temName)
+    loading.close()
+    if(!url){
+        setTimeout(() => {
+            showToast('生成ppt失败')
+        }, 60);
+        return
+    }
+    handlePublishPPT(url)
+
+}
 
 // 页面转ppt
 async function pageToPPT(){
@@ -737,13 +765,14 @@ async function pageToPPT(){
     }
     pptx2.write('blob').then((data)=>{
       LoadingINS.close()
-      if(publicSettingStore.publicSetting.ObjectStorageClient==='minio'){
+      /* if(publicSettingStore.publicSetting.ObjectStorageClient==='minio'){
         //上传到minio
         handleUploadToMinIO(data)
       }else{
         handleUploadToOSS(data)
-      }
+      } */
       //handleUploadToOSS(data)
+      uploadFileDirect(data)
     })
     // pptx2.writeFile({ fileName: "test.pptx" }) //本地测试可直接用该方法生成ppt文件
 }

Some files were not shown because too many files changed in this diff