代码拉取完成,页面将自动刷新
// Package client
// @program: file_client_go
// @author: ygt
// @create: 2022/8/17 14:55
package client
import (
"encoding/json"
"log"
"sync"
"time"
)
type up struct {
filePath string
uploadUri string
i int64
totalChunks float64
identifier string
clientId string
wg *sync.WaitGroup
}
func (t *up) do() {
//log.Printf("上传第%d片\n", t.i)
result, err := multipartF(t.filePath, t.uploadUri, t.i, (t.i-1)*chunkSize, t.totalChunks, t.identifier, t.clientId)
if err != nil {
log.Println(err)
}
var fur FileUploadResponseInfo
_ = json.Unmarshal(result, &fur)
//log.Println(string(result))
if fur.State == currentChunkFailed {
// 当前分片上传失败,失败重传
for y := 1; y <= retryNumber; y++ {
result, err = multipartF(t.filePath, t.uploadUri, t.i, (t.i-1)*chunkSize, t.totalChunks, t.identifier, t.clientId)
if err != nil {
log.Println(err)
}
_ = json.Unmarshal(result, &fur)
if fur.State == currentChunkSuccess {
// 重传分片成功
break
}
if fur.State == currentChunkLocked {
//log.Printf("当前分片%d锁定,跳过\n", t.i)
continue
}
time.Sleep(50 * time.Millisecond)
}
}
if fur.State == currentChunkLocked {
//log.Printf("--当前分片%d锁定,跳过--\n", t.i)
}
t.wg.Done()
}
func taskFunc(data interface{}) {
task := data.(*up)
task.do()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。