Golang实现Minio获取文件转压缩文件下载
根据Minio文件直接返回下载
方案一
func (l *DownloadFileLogic) DownloadFile(req *types.DownloadReq) (byte []byte, err error) {
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
}
方案二
func (l *DownloadFileLogic) DownloadFile(req *types.DownloadReq) (byte []byte, err error) {
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
}
方案三
func (l *DownloadFileLogic) DownloadFile(req *types.DownloadReq) (byte []byte, err error) {
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 {
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
}
方案四
func (l *DownloadFileLogic) DownloadFile(req *types.DownloadReq) (byte []byte, err error) {
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
}
chunk = append(chunk, buf...)
}
return chunk, nil
}
Minio文件压缩返回Zip文件
func (l *DownloadFileLogic) DownloadFile(req *types.DownloadReq) (byte []byte, err error) {
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文件
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) {
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)
zipWriter := zip.NewWriter(buf)
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
}
if err = zipWriter.Close(); err != nil {
l.Logger.Error("DownloadFile zipWriter.Close() error:{} object: {}", err, req.GetObjectName)
return nil, err
}
return buf.Bytes(), nil
}