client

package module
v0.0.0-...-1a3fe91 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 13, 2022 License: Apache-2.0 Imports: 27 Imported by: 0

README

file_client_go

开发说明

作为客户端,依赖应该尽量少,其他人在引用的时候才会最大可能的减少冲突,所以尽量还是使用go自己的方法

文件服务go客户端

上传文件流程:

  1. 通过GET请求获取最新上传进度,
  2. 分片上传POST请求(小文件(<5M)直接一片就上传),
  3. 上传完成调用服务端合并文件POST请求,
  4. 服务端根据配置决定是否上传minio.

并发上传:

  1. 客户端启动线程池,多goroutine
  2. 服务端记录每一片的状态并上锁
  3. 其他客户端上传同一片,无法获取锁,直接跳过
  4. 服务端合并文件也上锁(只允许一个客户端合并),其他客户端等待结果

断点续传:

  1. 其他客户端通过GET请求获取最新上传进度,
  2. 继续上传

失败重传:

  1. 上传单片文件,失败后,会重试3次

部分开关

env value note default
F_UNIQUE_ALGORITHM XXH/MD5/SHA-1/SHA-256/CRC32 校验方法(客户端与服务端需要一致) XXH
F_THREAD_NUM 10 goroutine数量 10
F_CHUNK_SIZE 5242880 分片大小(默认 5M) 5242880

依赖

    github.com/cespare/xxhash/v2 v2.1.2
github.com/panjf2000/ants/v2 v2.5.0

使用方法

package test

import (
	client "gitee.com/lurenjia528/file_client_go"
	"log"
	"testing"
)

const (
	uploadUri    = "http://127.0.0.1:8081/rest/store/v1/store/upload"
	mergeUri     = "http://127.0.0.1:8081/rest/store/v1/store/merge"
	downloadUri  = "http://127.0.0.1:8081/rest/store/v1/store/download/1835133a-a050-4405-8846-b0bae6524ac2"
	deleteUri    = "http://127.0.0.1:8081/rest/store/v1/store/delete/cd0b53ad-d59b-40da-b725-7118da87484f"
	filePath     = "D:\\softwarebag\\WebStorm-2022.1.1.exe"
	downloadPath = "D:\\work\\code\\archer\\file_server\\static\\dt"
	clientId     = "用户id"
)

func TestUpload(t *testing.T) {
	f := client.FClient.UploadF(filePath, uploadUri, mergeUri, clientId)
	log.Println("999999999999999999999")
	log.Printf("%v\n", f)
}

func TestDownload(t *testing.T) {
	fileFullPath, err := client.FClient.DownloadF(downloadPath, downloadUri)
	if err != nil {
		log.Println("下载失败,err:", err)
		return
	}
	log.Println(fileFullPath)
}

func TestDelete(t *testing.T) {
	ok, msg := client.FClient.DeleteF(deleteUri)
	log.Println(ok, msg)
}

Documentation

Overview

Package client @program: file_client_go @author: ygt @create: 2022/8/1 9:49

Package client @program: file_client_go @author: ygt @create: 2022/8/17 14:52

Package client @program: file_client_go @author: ygt @create: 2022/8/17 14:50

Package client @program: file_client_go @author: ygt @create: 2022/8/17 14:55

Package client @program: file_client_go @author: ygt @create: 2022/8/17 14:55

Package client @program: file_client_go @author: ygt @create: 2022/8/17 14:51

Package client @program: file_client_go @author: ygt @create: 2022/7/25 17:52

Index

Constants

View Source
const (
	XXH    = "XXH"
	MD5    = "MD5"
	SHA1   = "SHA-1"
	SHA256 = "SHA-256"
	CRC32  = "CRC32"
)

Variables

View Source
var (
	FClient = newC()
)
View Source
var (
	Ic = newIC()
)

Functions

This section is empty.

Types

type FileDeleteResponseInfo

type FileDeleteResponseInfo struct {
	Code int    `json:"code"`
	Data string `json:"data"`
	Msg  string `json:"msg"` // 其他信息
}

type FileUploadResponseInfo

type FileUploadResponseInfo struct {
	State        State  `json:"state"`        // 状态码 constant包
	NotYetUpload []int  `json:"notYetUpload"` // 未上传的片
	Msg          string `json:"msg"`          // 其他信息
	DownloadSite string `json:"downloadSite"` // 下载地址
	PreviewSite  string `json:"previewSite"`  // 预览地址
	QuoteUuid    string `json:"quoteUuid"`
}

type State

type State int

Directories

Path Synopsis
Package test @program: file_client_go @author: ygt @create: 2022/8/25 23:01
Package test @program: file_client_go @author: ygt @create: 2022/8/25 23:01

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL