Golang implementiert Minio, um Dateien zu erhalten und komprimierte Dateien zum Herunterladen zu konvertieren

Golang implementiert Minio, um Dateien zu erhalten und komprimierte Dateien zum Herunterladen zu konvertieren

Direkt zurück zum Download gemäß der Minio-Datei

Option eins

func (l *DownloadFileLogic) DownloadFile(req *types.DownloadReq) (byte []byte, err error) {
    
    

	// 获取MinIO对象
	var object *minio.Object
	object, err = l.svcCtx.Minio.Client.GetObject(l.svcCtx.Config.Minio.Bucket, req.GetObjectName, minio.GetObjectOptions{
    
    })
	if err != nil {
    
    
		l.Logger.Error("Download from minio error:{} object: {}", err, req.GetObjectName)
		return nil, err
	}

	chunk, err := ioutil.ReadAll(object)
	if err != nil {
    
    
		fmt.Println("read to fd fail", err)
		return nil, nil
	}

	return chunk, nil
}

Variante II

func (l *DownloadFileLogic) DownloadFile(req *types.DownloadReq) (byte []byte, err error) {
    
    

	// 获取MinIO对象
	var object *minio.Object
	object, err = l.svcCtx.Minio.Client.GetObject(l.svcCtx.Config.Minio.Bucket, req.GetObjectName, minio.GetObjectOptions{
    
    })
	if err != nil {
    
    
		l.Logger.Error("Download from minio error:{} object: {}", err, req.GetObjectName)
		return nil, err
	}

	bowl := bytes.Buffer{
    
    }
	num, err := bowl.ReadFrom(object)
	fmt.Println(num)
	return bowl.Bytes(),nil
	
}

dritte Lösung

func (l *DownloadFileLogic) DownloadFile(req *types.DownloadReq) (byte []byte, err error) {
    
    

	// 获取MinIO对象
	var object *minio.Object
	object, err = l.svcCtx.Minio.Client.GetObject(l.svcCtx.Config.Minio.Bucket, req.GetObjectName, minio.GetObjectOptions{
    
    })
	if err != nil {
    
    
		l.Logger.Error("Download from minio error:{} object: {}", err, req.GetObjectName)
		return nil, err
	}

	var chunk []byte
	buf := make([]byte, 1024)
	for {
    
    
		// 从file读取到buf中
		// Read reads up to len(b) bytes into b.
		// It returns the number of bytes read (0 <= n <= len(b)) and any error encountered.
		// Returns io.EOF upon end of file.
		n, err := object.Read(buf)
		if err != nil && err != io.EOF {
    
    
			fmt.Println("read buf fail", err)
			return err, nil
		}
		// 读取结束
		if n == 0 {
    
    
			fmt.Println("n=0")
			break
		}
		// 读取到最终的缓冲区中
		chunk = append(chunk, buf[:n]...)
	}
	return chunk, nil
}

Möglichkeit vier

func (l *DownloadFileLogic) DownloadFile(req *types.DownloadReq) (byte []byte, err error) {
    
    

	// 获取MinIO对象
	var object *minio.Object
	object, err = l.svcCtx.Minio.Client.GetObject(l.svcCtx.Config.Minio.Bucket, req.GetObjectName, minio.GetObjectOptions{
    
    })
	if err != nil {
    
    
		l.Logger.Error("Download from minio error:{} object: {}", err, req.GetObjectName)
		return nil, err
	}
	r := bufio.NewReader(object)
	var chunk []byte
	buf := make([]byte, 1024)
	for {
    
    
		n, err := r.Read(buf)
		if err != nil && err != io.EOF {
    
    
			panic(err)
		}
		if 0 == n {
    
    
			break
		}
		//fmt.Println(string(buf))
		chunk = append(chunk, buf...)
	}
	return chunk, nil
}

Die Minio-Dateikomprimierung gibt eine Zip-Datei zurück



func (l *DownloadFileLogic) DownloadFile(req *types.DownloadReq) (byte []byte, err error) {
    
    

	// 获取MinIO对象
	var object *minio.Object
	object, err = l.svcCtx.Minio.Client.GetObject(l.svcCtx.Config.Minio.Bucket, req.GetObjectName, minio.GetObjectOptions{
    
    })
	if err != nil {
    
    
		l.Logger.Error("Download from minio error:{} object: {}", err, req.GetObjectName)
		return nil, err
	}
	buf := new(bytes.Buffer)
	w := zip.NewWriter(buf)
	f, err := w.Create(req.GetObjectName)
	if err != nil {
    
    
		return nil, err
	}
	if _, err := io.Copy(f, object); err != nil {
    
    
		return nil, err
	}
	if err := w.Close(); err != nil {
    
    
		return nil, err
	}
	return buf.Bytes(), nil
}

ZiP-Datei mit komprimiertem Passwort generieren


import (
"bytes"
"context"
"github.com/alexmullins/zip"
"github.com/minio/minio-go/v6"
"github.com/zeromicro/go-zero/core/logx
"io"
)


func (l *DownloadFileLogic) DownloadFile(req *types.DownloadReq) (byte []byte, err error) {
    
    

	// 获取MinIO对象
	var object *minio.Object
	object, err = l.svcCtx.Minio.Client.GetObject(l.svcCtx.Config.Minio.Bucket, req.GetObjectName, minio.GetObjectOptions{
    
    })
	if err != nil {
    
    
		l.Logger.Error("Download from minio error:{} object: {}", err, req.GetObjectName)
		return nil, err
	}
	// 创建一个新的字节数组缓冲区和zip文件写入器
	buf := new(bytes.Buffer)
	zipWriter := zip.NewWriter(buf)
	// 向zip文件写入器中添加一个文件项,并将原始数据复制到该文件项中
	file, err := zipWriter.Encrypt(req.GetObjectName, "pwd")
	if err != nil {
    
    
		l.Logger.Error("DownloadFile zipWriter.Create error:{} object: {}", err, req.GetObjectName)
		return nil, err
	}
	if _, err = io.Copy(file, object); err != nil {
    
    
		l.Logger.Error("DownloadFile io.Copy error:{} object: {}", err, objectName)
		return nil, err
	}
	// 关闭zip文件写入器以刷新所有缓冲区并生成完整的ZIP文件
	if err = zipWriter.Close(); err != nil {
    
    
		l.Logger.Error("DownloadFile zipWriter.Close() error:{} object: {}", err, req.GetObjectName)
		return nil, err
	}
	// 返回ZIP文件的字节切片
	return buf.Bytes(), nil
    
}


Supongo que te gusta

Origin blog.csdn.net/u010349629/article/details/129945441
Recomendado
Clasificación