Git Product home page Git Product logo

minio-progress's Introduction

为minio上传下载提供便捷的进度条接口

使用minio-progress快速为minio上传和下载添加进度条

[===========         ] 856293376 / 1529094438 56%

从github安装

$ go get github.com/markity/minio-progress

快速开始

上传使用进度条

// 创建上传进度条对象
progressBar := progress.NewUploadProgress(fileSize)

// 然后将进度条对象包含在minio.PutObjectOptions中的Progress配置即可
n, err = client.PutObject(bucketName, objectName, file, fileSize, minio.PutObjectOptions{ContentType: "application/octet-stream", Progress: progressBar})
if err != nil {
    fmt.Printf("上传文件失败:%v\n", err)
}

完整案例

main.go

package main

import (
    "log"
    "os"

    // 导入进度条包
    progress "github.com/markity/minio-progress"

    // 导入minio SDK
    "github.com/minio/minio-go"
)

// minio客户端基本信息
var endpoint = "127.0.0.1:9000"
var accessKeyID = "Your-AccessKeyID"
var secretAccessKey = "Your-SecretAccessKey"
var secure = false

// 数据桶信息
var bucketName = "music"
var location = "us-east-1"

// 上传文件信息
var objectName = "big.rar"
var filePath = "./big.rar"

func main() {
    client, err := minio.New(endpoint, accessKeyID, secretAccessKey, secure)
    if err != nil {
        log.Fatalf("创建客户端失败:%v\n", err)
    }

    // 检查数据桶是否存在
    exists, err := client.BucketExists(bucketName)
    if err != nil {
        log.Fatalf("查询数据桶错误:%v\n", err)
    }
    // 不存在则创建数据桶
    if !exists {
        err := client.MakeBucket(bucketName, location)
        if err != nil {
            log.Fatalf("创建数据桶错误:%v\n", err)
        }
    }

    // 打开文件
    file, err := os.OpenFile(filePath, os.O_RDONLY, 0444)
    if err != nil {
        log.Fatalf("打开文件失败:%v\n", err)
    }

    // 获取文件大小
    fileInfo, err := file.Stat()
    if err != nil {
        log.Fatalf("获取文件信息失败:%v\n", err)
    }
    fileSize := fileInfo.Size()

    // 创建进度条对象, 需要在参数中输入文件的大小
    progressBar := progress.NewUploadProgress(fileSize)

    _, err = client.PutObject(bucketName, objectName, file, fileSize, minio.PutObjectOptions{ContentType: "application/octet-stream", Progress: progressBar})
    if err != nil {
        log.Fatalf("上传失败:%v\n", err)
    }
    log.Printf("上传成功!\n")
}
$ ls
big.rar  main.go
$ go run ./main.go
[====================] 1529094438 / 1529094438 100%
2019/08/10 16:00:26 上传成功!

下载使用进度条

// minio-go没有为下载接口提供查询进度功能, 所以只能在本地拷贝流时获取下载进度
// 你可以使用progress.CopyWithProgress代替io.Copy来将对象下载到本地文件
// 说明: progress.CopyWithProgress只是简单封装了io.Copy, 使之能打印下载进度

// 首先获取对象
object, err := client.GetObject(bucketName, objectName, minio.GetObjectOptions{})
if err != nil {
    log.Fatalf("获取文件失败:%v\n", err)
}

// 然后使用io.CopyWithProgress拷贝到文件即可
n, err := progress.CopyWithProgress(file, object)
if err != nil {
    log.Fatalf("下载文件失败:%v\n", err)
}

完整案例

main.go

package main

import (
	"log"
	"os"

	progress "github.com/markity/minio-progress"
	"github.com/minio/minio-go"
)

// minio客户端基本信息
var endpoint = "127.0.0.1:9000"
var accessKeyID = "Your-AccessKeyID"
var secretAccessKey = "Your-SecretAccessKey"
var secure = false

// 数据桶信息
var bucketName = "music"
var location = "us-east-1"

// 下载文件信息
var objectName = "big.rar"
var filePath = "./big.rar"

func main() {
    client, err := minio.New(endpoint, accessKeyID, secretAccessKey, secure)
    if err != nil {
        log.Fatalf("创建客户端失败:%v\n", err)
    }

    object, err := client.GetObject(bucketName, objectName, minio.GetObjectOptions{})
    if err != nil {
        log.Fatalf("获取文件失败:%v\n", err)
    }

    file, err := os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY, 0666)
    if err != nil {
        log.Fatalf("打开文件失败:%v\n", err)
    }
    defer file.Close()

    if _, err := progress.CopyWithProgress(file, object); err != nil {
        log.Fatalf("下载文件失败:%v\n", err)
    }

    log.Printf("下载文件成功!\n")
}
$ ls
main.go
$ go run ./main.go
[====================] 1529094438 / 1529094438 100%
2019/08/10 17:43:00 下载文件成功

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.