Skip to content

Commit

Permalink
Update rapidUploadV2, remove preCreate
Browse files Browse the repository at this point in the history
  • Loading branch information
yun.zhong authored and qjfoidnh committed Aug 22, 2021
1 parent 7a573cd commit 507627e
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 32 deletions.
23 changes: 2 additions & 21 deletions baidupcs/prepare.go
Original file line number Diff line number Diff line change
Expand Up @@ -296,26 +296,8 @@ func (pcs *BaiduPCS) PrepareRapidUpload(targetPath, contentMD5, sliceMD5, crc32
return pcs.prepareRapidUpload(targetPath, contentMD5, sliceMD5, crc32, length)
}

// PrepareRapidUploadV2PreCreate 秒传文件, 新接口, step-1 precreate
func (pcs *BaiduPCS) PrepareRapidUploadV2PreCreate(targetPath, contentMD5 string, length int64) (dataReadCloser io.ReadCloser, pcsError pcserror.Error) {
pcs.lazyInit()
pcsURL := pcs.generatePCSURL2("xpan/file", "precreate", nil)
post := map[string]string{
"path": targetPath,
"size": strconv.FormatInt(length, 10),
"isdir": "0",
"autoinit": "1",
"rtype": "0",
"block_list": mergeStringList(contentMD5),
}
baiduPCSVerbose.Infof("%s URL: %s, Post: %v\n", OperationRapidUpload, pcsURL, post)

dataReadCloser, pcsError = pcs.sendReqReturnReadCloser(reqTypePan, OperationRapidUpload, http.MethodPost, pcsURL.String(), post, nil)
return
}

// PrepareRapidUploadV2Create 秒传文件, 新接口, step-2 create
func (pcs *BaiduPCS) PrepareRapidUploadV2Create(targetPath, contentMD5, uploadid string, length int64) (dataReadCloser io.ReadCloser, pcsError pcserror.Error) {
// PrepareRapidUploadV2 秒传文件, 新接口
func (pcs *BaiduPCS) PrepareRapidUploadV2(targetPath, contentMD5 string, length int64) (dataReadCloser io.ReadCloser, pcsError pcserror.Error) {
pcs.lazyInit()
pcsError = pcs.checkIsdir(OperationRapidUpload, targetPath)
if pcsError != nil {
Expand All @@ -328,7 +310,6 @@ func (pcs *BaiduPCS) PrepareRapidUploadV2Create(targetPath, contentMD5, uploadid
"size": strconv.FormatInt(length, 10),
"isdir": "0",
"rtype": "0",
"uploadid": uploadid,
"block_list": mergeStringList(contentMD5),
"mode": "1",
}
Expand Down
34 changes: 23 additions & 11 deletions baidupcs/upload.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package baidupcs

import (
"errors"
"fmt"
"math/rand"
"net/http"
"path"
Expand Down Expand Up @@ -36,6 +37,8 @@ var (
ErrUploadSeqNotMatch = errors.New("服务器返回的上传队列不匹配")
// ErrUploadMD5Unknown 服务器无匹配文件/秒传未生效
ErrUploadMD5Unknown = errors.New("服务器无匹配文件/秒传未生效")
// ErrUploadFileExists 文件或目录已存在
ErrUploadFileExists = errors.New("文件已存在")
)

type (
Expand Down Expand Up @@ -69,6 +72,12 @@ type (
fdJSON `json:"info"`
}

uploadCreateJSON struct {
ErrNo int `json:"errno"` // 0成功, 2失败
Path string `json:"path"`
*pcserror.PanErrorInfo
}

// UploadSeq 分片上传顺序
UploadSeq struct {
Seq int
Expand Down Expand Up @@ -141,34 +150,37 @@ func (pcs *BaiduPCS) rapidUpload(targetPath, contentMD5, sliceMD5, crc32 string,
}

func (pcs *BaiduPCS) rapidUploadV2(targetPath, contentMD5 string, length int64) (pcsError pcserror.Error) {
dataReadCloser, pcsError := pcs.PrepareRapidUploadV2PreCreate(targetPath, contentMD5, length)
dataReadCloser, pcsError := pcs.PrepareRapidUploadV2(targetPath, contentMD5, length)
if pcsError != nil {
return
}
defer dataReadCloser.Close()

errInfo := pcserror.NewPanErrorInfo(OperationRapidUpload)
jsonData := uploadPrecreateJSON{
jsonData := uploadCreateJSON{
PanErrorInfo: errInfo,
}

pcsError = pcserror.HandleJSONParse(OperationRapidUpload, dataReadCloser, &jsonData)
if pcsError != nil {
return
}

if jsonData.ReturnType != 1 || len(jsonData.BlockList) != 0 {
switch jsonData.ErrNo {
case 0:
return
case 2:
errInfo.ErrType = pcserror.ErrTypeOthers
errInfo.Err = ErrUploadMD5Unknown
return errInfo
case -8:
errInfo.ErrType = pcserror.ErrTypeOthers
errInfo.Err = ErrUploadFileExists
return errInfo
default:
errInfo.ErrType = pcserror.ErrTypeOthers
errInfo.Err = fmt.Errorf("errno=%d", jsonData.ErrNo)
return errInfo
}

dataReadCloser2, pcsError := pcs.PrepareRapidUploadV2Create(targetPath, contentMD5, jsonData.UploadID, length)
if pcsError != nil {
return
}
defer dataReadCloser2.Close()
return pcserror.DecodePCSJSONError(OperationRapidUpload, dataReadCloser2)
}

// RapidUploadNoCheckDir 秒传文件, 不进行目录检查, 会覆盖掉同名的目录!
Expand Down

0 comments on commit 507627e

Please sign in to comment.