cxmo 1 жил өмнө
parent
commit
c1eededa91

+ 5 - 0
package.json

@@ -10,11 +10,14 @@
     "preview": "vite preview"
   },
   "dependencies": {
+    "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
+    "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
     "@vant/touch-emulator": "^1.4.0",
     "@vueuse/components": "^9.13.0",
     "@vueuse/core": "^9.13.0",
     "ali-oss": "^6.17.1",
     "axios": "^1.3.4",
+    "buffer": "^6.0.3",
     "file-saver": "^2.0.5",
     "highcharts": "^9.3.2",
     "himalaya": "^1.1.0",
@@ -24,10 +27,12 @@
     "js-md5": "^0.7.3",
     "lodash": "^4.17.21",
     "minio": "^7.0.18",
+    "minio-es": "0.0.2",
     "moment": "^2.29.4",
     "normalize.css": "^8.0.1",
     "pinia": "^2.0.36",
     "pptxgenjs": "^3.12.0",
+    "rollup-plugin-node-polyfills": "^0.2.1",
     "v3-color-picker-teleport": "^1.0.9",
     "vant": "^4.6.4",
     "vconsole": "^3.15.0",

+ 23 - 5
src/hooks/useUploadFileToOSS.js

@@ -1,10 +1,12 @@
 // 上传文件到阿里云oss
 import OSS from 'ali-oss'
 import {apiGetOSSSign} from '@/api/common'
-/* import { createRequire } from 'module'
-const require = createRequire(import.meta.url)
-const Minio = require('minio')
+/* const Minio = require('minio')
 const stream = require('stream') */
+import * as Minio from 'minio-es'
+import * as stream from 'stream'
+import * as buffer from 'buffer'
+const Buffer = buffer.Buffer
 
 /**
  * 上传到oss
@@ -66,6 +68,18 @@ export async function useUploadFileToOSS(data,fileName,isMultipart=false){
     return resUrl
 }
 
+//vite 不支持Buffer 代替Buffer.form方法
+const toBinary = (data)=>{
+    const length = data.length
+    let buf = new ArrayBuffer(length)
+    let view  = new Uint8Array(buf)
+    for(let i=0;i<length;++i){
+        view[i] = data[i]
+    }
+    let blob = new Blob([buf],{type:'application/x-tra'})
+    const url = URL.createObjectURL(blob)
+    return url
+}
 //上传到minio
 // minio sdk 文档 https://min.io/docs/minio/linux/developers/javascript/API.html
 export async function useUploadToMinIO (file, fileName, options = {}){
@@ -111,7 +125,9 @@ export async function useUploadToMinIO (file, fileName, options = {}){
                         let bufferStream = new stream.PassThrough();
                         // 转化成数据流  minio接受数据流格式
                         bufferStream.end(Buffer.from(dataurl))
+                        //bufferStream.end(toBinary(dataurl))
                         // console.log(bufferStream);
+                        const bufferUrl = toBinary(dataurl)
                         minioClient.putObject(res.Data.Bucketname, fileName, bufferStream, file.size, metaData, function (err, etag) {
                             if (err) {
                                 return console.log("上传到minio失败:" + err)
@@ -125,19 +141,21 @@ export async function useUploadToMinIO (file, fileName, options = {}){
             if (exists) {
                 // console.log("桶存在",res.Data.Bucketname);
                 let reader = new FileReader();
-                console.log(reader);
+                console.log('reader',reader);
                 reader.readAsArrayBuffer(file);
                 reader.onloadend = function (e) {
                     const dataurl = e.target.result;
                     let bufferStream = new stream.PassThrough();
-
                     bufferStream.end(Buffer.from(dataurl))
+                    //bufferStream.end(toBinary(dataurl))
+                    const bufferUrl = toBinary(dataurl)
                     minioClient.putObject(res.Data.Bucketname, fileName, bufferStream, metaData, function (err, etag) {
                         if (err) {
                             console.log("上传到minio失败:" + err)
                             return 
                         }
                         let fileUrl = fileName.startsWith('/') ? res.Data.ImgHost + fileName : res.Data.ImgHost + "/" + fileName
+                        console.log('test',fileUrl)
                         return fileUrl
                     })
                 }

+ 9 - 0
src/main.js

@@ -17,6 +17,15 @@ import svgIcon from "@/components/SvgIcon.vue";
 //引入注册脚本
 import 'virtual:svg-icons-register'
 
+/* import { Buffer } from 'buffer'; */
+import * as buffer from 'buffer'
+if(typeof(window.global)==="undefined"){
+    window.global = window
+}
+if(typeof(window.Buffer)==="undefined"){
+    window.Buffer = buffer.Buffer
+}
+
 
 if(import.meta.env.MODE==='test'){
     const vConsole = new VConsole();

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

@@ -657,13 +657,13 @@ 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)
+      }
+      //handleUploadToOSS(data)
     })
     // pptx2.writeFile({ fileName: "test.pptx" }) //本地测试可直接用该方法生成ppt文件
 }

+ 19 - 0
vite.config.js

@@ -5,6 +5,9 @@ import Components from "unplugin-vue-components/vite";
 import { VantResolver } from "unplugin-vue-components/resolvers";
 import VueSetupExtend from 'vite-plugin-vue-setup-extend'
 import {createSvgIconsPlugin} from 'vite-plugin-svg-icons'
+import { NodeGlobalsPolyfillPlugin } from '@esbuild-plugins/node-globals-polyfill'
+import { NodeModulesPolyfillPlugin } from '@esbuild-plugins/node-modules-polyfill'
+import rollupNodePolyFill from 'rollup-plugin-node-polyfills'
 
 // https://vitejs.dev/config/
 export default ({ mode }) =>
@@ -47,10 +50,26 @@ export default ({ mode }) =>
     resolve: {
       alias: {
         "@": path.resolve(__dirname, "./src"),
+        stream: 'rollup-plugin-node-polyfills/polyfills/stream',
+        buffer: 'rollup-plugin-node-polyfills/polyfills/buffer-es6',
       }
     },
+    optimizeDeps: {
+        esbuildOptions: {
+          // Enable esbuild polyfill plugins
+          plugins: [
+            NodeModulesPolyfillPlugin()
+          ]
+        }
+      },
     build: {
       outDir: loadEnv(mode, process.cwd()).VITE_APP_OUTDIR,
+      rollupOptions: {
+        plugins: [
+          // Enable rollup polyfills plugin used during production bundling
+          rollupNodePolyFill()
+        ]
+      }
     },
     server:{
       host:true