|
@@ -1,6 +1,10 @@
|
|
|
// 上传文件到阿里云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 stream = require('stream') */
|
|
|
|
|
|
/**
|
|
|
* 上传到oss
|
|
@@ -10,7 +14,7 @@ import {apiGetOSSSign} from '@/api/common'
|
|
|
* @returns fileUrl 返回文件在阿里云上的地址
|
|
|
*/
|
|
|
export async function useUploadFileToOSS(data,fileName,isMultipart=false){
|
|
|
- const signRes=await apiGetOSSSign()
|
|
|
+ const signRes=await apiGetOSSSign({StorageSource:1})
|
|
|
if(signRes.Ret!==200) return
|
|
|
const accessKeyId=signRes.Data.AccessKeyId
|
|
|
const accessKeySecret=signRes.Data.AccessKeySecret
|
|
@@ -60,4 +64,90 @@ export async function useUploadFileToOSS(data,fileName,isMultipart=false){
|
|
|
|
|
|
|
|
|
return resUrl
|
|
|
+}
|
|
|
+
|
|
|
+//上传到minio
|
|
|
+// minio sdk 文档 https://min.io/docs/minio/linux/developers/javascript/API.html
|
|
|
+export async function useUploadToMinIO (file, fileName, options = {}){
|
|
|
+ const res = await apiGetOSSSign({StorageSource:2})
|
|
|
+ if (res.Ret !== 200) {
|
|
|
+ console.log("获取minio临时签名错误,res.Ret=" + res.Ret)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ const minioClient = new Minio.Client({
|
|
|
+ endPoint: res.Data.Endpoint.split(':')[0],
|
|
|
+ port: Number(res.Data.Port) || undefined,
|
|
|
+ useSSL: res.Data.UseSSL.toLocaleLowerCase() == "false" ? false : true,
|
|
|
+ accessKey: res.Data.AccessKeyId,
|
|
|
+ secretKey: res.Data.SecretKeyId,
|
|
|
+ })
|
|
|
+ console.log(minioClient);
|
|
|
+ try {
|
|
|
+ var metaData = {
|
|
|
+ ...{
|
|
|
+ 'Content-Type': file.type || 'application/octet-stream',
|
|
|
+ "Content-Length": file.size,
|
|
|
+ },
|
|
|
+ ...options
|
|
|
+ }
|
|
|
+
|
|
|
+ minioClient.bucketExists(res.Data.Bucketname, function (err, exists) {
|
|
|
+ if (err) {
|
|
|
+ return console.log("minio 查看桶是否存在失败" + err)
|
|
|
+ }
|
|
|
+ if (!exists) {
|
|
|
+ // 不存在桶,创建桶
|
|
|
+ console.log("桶不存在,先创建桶", res.Data.Bucketname);
|
|
|
+ minioClient.makeBucket(res.Data.Bucketname, res.Data.RegionId, function (err) {
|
|
|
+ if (err) {
|
|
|
+ console.log("minio 创建桶失败" + err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ let reader = new FileReader();
|
|
|
+ // console.log(reader);
|
|
|
+ reader.readAsArrayBuffer(file);
|
|
|
+ reader.onloadend = function (e) {
|
|
|
+ const dataurl = e.target.result;
|
|
|
+ let bufferStream = new stream.PassThrough();
|
|
|
+ // 转化成数据流 minio接受数据流格式
|
|
|
+ bufferStream.end(Buffer.from(dataurl))
|
|
|
+ // console.log(bufferStream);
|
|
|
+ minioClient.putObject(res.Data.Bucketname, fileName, bufferStream, file.size, metaData, function (err, etag) {
|
|
|
+ if (err) {
|
|
|
+ return console.log("上传到minio失败:" + err)
|
|
|
+ }
|
|
|
+ let fileUrl = fileName.startsWith('/') ? res.Data.ImgHost + fileName : res.Data.ImgHost + "/" + fileName
|
|
|
+ return fileUrl
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (exists) {
|
|
|
+ // console.log("桶存在",res.Data.Bucketname);
|
|
|
+ let reader = new FileReader();
|
|
|
+ console.log(reader);
|
|
|
+ reader.readAsArrayBuffer(file);
|
|
|
+ reader.onloadend = function (e) {
|
|
|
+ const dataurl = e.target.result;
|
|
|
+ let bufferStream = new stream.PassThrough();
|
|
|
+
|
|
|
+ bufferStream.end(Buffer.from(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
|
|
|
+ return fileUrl
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } catch (error) {
|
|
|
+ console.error(error);
|
|
|
+ if (error.name !== "cancel") {
|
|
|
+ //不是取消上传的则给错误提示
|
|
|
+ this.$message.warning("上传失败,请刷新重试");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|