diff --git a/file-system-upload.go b/file-system-upload.go index 844d092..9d207b1 100644 --- a/file-system-upload.go +++ b/file-system-upload.go @@ -358,24 +358,32 @@ func UploadProcessSocketThread(conn *net.Conn, fileLength int64, blockCount *int var imageHash string stop := false errTimes := 0 - var buffer []byte blockCountLock.Lock() nowBlock := *blockCount *blockCount = *blockCount + 1 + var recvSize int64 = 0 if (nowBlock+1)*singleImageMaxSize > int64(fileLength) { if nowBlock*singleImageMaxSize > int64(fileLength) { break } - buffer = make([]byte, fileLength-nowBlock*singleImageMaxSize) + recvSize = fileLength - nowBlock*singleImageMaxSize } else { - buffer = make([]byte, singleImageMaxSize) + recvSize = singleImageMaxSize } + buffer := make([]byte, recvSize) - _, err = (*conn).Read(buffer) - if err != nil && err != io.EOF { - runtime.GC() - threadsWaitGroup.Done() - panic(err) + var totalBytes int64 = 0 + for { + num, err := (*conn).Read(buffer[totalBytes:recvSize]) + if err != nil && err != io.EOF { + runtime.GC() + threadsWaitGroup.Done() + panic(err) + } + totalBytes = totalBytes + int64(num) + if totalBytes == recvSize { + break + } } blockCountLock.Unlock() diff --git a/file-system.go b/file-system.go index 2288bf9..e226cd8 100644 --- a/file-system.go +++ b/file-system.go @@ -85,6 +85,32 @@ func GetTempPath(path string) ([][]string, error) { //获取内部path列表 return tempPath, nil } +func DoesNodeExist(path string) (bool, string, error) { //查看节点是否存在 path:要查询的路径 返回值:是否存在, node类型 + if rootNodeHash == "" { + return false, "", NotSetARootNodeYet() + } + if path == "/" { + return true, "0", nil + } + + nodeRWLock.Lock() + tempPath, err := GetTempPath(GetPathFolder(path)) + if err != nil { + nodeRWLock.Unlock() + return false, "", err + } + nodeData, err := DecodeNode(tempPath[len(tempPath)-1][1], true) + nodeRWLock.Unlock() + if err != nil { + return false, "", err + } + + if fileData, ok := nodeData[GetPathFileName(path)]; ok { + return true, fileData[0], nil + } + return false, "", nil +} + func ListFile(path string) ([][]string, error) { //获取当前文件夹下所有东西(ls) path:要获取的路径 返回值:[[文件名,node类型], ...] if rootNodeHash == "" { return nil, NotSetARootNodeYet()