小工具知识网

当前位置: 首页 > 行业知识 > 前端使用minio传输文件

行业知识

前端使用minio传输文件

2026-10-31 15:16:31 来源:互联网转载

minio官方文档

minio-js可以支持ts。

安装完可能会出现

Can‘t import the named export ‘xxx‘ from non EcmaScript module (only default export is available)

可以尝试降低minio的版本

npm install minio@7.0.18 --save

代码:

初始化
const Minio = require('minio') const minioClient = new Minio.Client({  endPoint: '192.l68.0.1', //minio服务器ip,不能加http://  port: 9000,  accessKey: 'xxxx', //username  secretKey: 'xxxx', //password  useSSL: false  //https访问需要设置为true})
上传文件
 const stream = require('stream') /** * * @export 上传文件(stream流方法) * @param {*} backetName String 存储桶名字 * @param {*} fileObj Object 文件对象 * @param {*} callback function 回调函数 */export function uploadFile (backetName, fileObj, callback) {  console.log(backetName, fileObj)  if (fileObj) {    const file = fileObj    if (file === undefined) {      // 未选择    } else {      const date = new Date()      const year = new Date().getFullYear()      const month =        date.getMonth() + 1  9 ? date.getDate() : '0' + date.getDate()      const fileName = date.getTime() + file.name      const fileDate = '' + year + month + day      const mineType = file.type      const fileSize = file.size      console.log('fileName', fileName)      // 参数      const metadata = {        'content-type': mineType,        'content-length': fileSize      }      // 判断储存桶是否存在      minioClient.bucketExists(backetName, function (err) {        console.log('判断储存桶是否存在')        if (err) {          if (err.code === 'NoSuchBucket') {            return console.log('bucket does not exist.')          }          console.log('1233221')          return console.log(err)        }        // 准备上传        const reader = new FileReader()        reader.readAsDataURL(file)        reader.onloadend = function (e) {          const dataurl = e.target.result          const blob = toBlob(dataurl)          const reader2 = new FileReader()          reader2.readAsArrayBuffer(blob)          reader2.onload = function (ex) {            const bufferStream = new stream.PassThrough()            bufferStream.end(Buffer.from(ex.target.result))            minioClient.putObject(              backetName,              `${fileDate}/${fileName}`,              bufferStream,              fileSize,              metadata,              (err) => {                if (err == null) {                  minioClient.presignedPutObject(                    backetName,                    `${fileDate}/${fileName}`,                    24 * 60 * 60,                    function (err1, presignedUrl) {                      console.log(err1)                      if (err1) return                      if (presignedUrl) {                        const arr = presignedUrl.split('?')                        if (arr.length === 2) {                          callback(arr[0])                        }                      }                    }                  )                }              }            )          }        }      })    }  }} /** * * @export base64转blob * @param {*} base64Data Object base64数据 * @return {*} blob */export function toBlob (base64Data) {  let byteString = base64Data  if (base64Data.split(',')[0].indexOf('base64') >= 0) {    byteString = window.atob(base64Data.split(',')[1]) // base64 解码  } else {    byteString = unescape(base64Data.split(',')[1])  }  // 获取文件类型  const mimeString = base64Data.split(';')[0].split(':')[1] // mime类型  const uintArr = new Uint8Array(byteString.length) // 创建视图   for (let i = 0; i  {    if (err) {      minioClient.makeBucket(bucketName, 'us-east-1', err1 => {        if (err1) {          console.error(`${info.file.name}文件上传失败`)          return        }        uploadFile(bucketName, info, callback)      })    } else {      uploadFile(bucketName, info, callback)    }  })} // 先判断桶是否存在export function connectionStatus (bucketName, callback) {  minioClient.bucketExists(bucketName, err => {    console.Log(err)    callback(err)  })}
上传文件简单版:
const bucketName = 'picturebook-version'; // 替换为你的存储桶名称const objectName = file.file.name; // 使用文件名作为对象名称//创建 FileReader 对象const reader = new FileReader();// 当读取完成时触发的回调函数reader.onload = (event) => {// 从事件对象中获取文件内容const fileContent = event.target.result;// 转换 ArrayBuffer 为 Buffer 类型数据const buffer = Buffer.from(fileContent);// 使用 putObject 方法上传文件内容this.minioClient.putObject(bucketName, objectName, buffer, buffer.length, (err, etag) => {if (err) {console.error('上传文件失败:', err);} else {this.fileList.push(this.newFile);this.fileName = objectName; console.log('文件上传成功,ETag:', etag);}});};// 开始读取文件reader.readAsArrayBuffer(file.file);
下载文件
 export function downloadFile (bucketName, fileName, callback) {  minioClient.getObject(bucketName, fileName, (err, dataStream) => {    callback(err, dataStream)  })}
使用
 上传 

上一篇:备案掉了怎么办?

下一篇:美国服务器怎么获得?