func fillBufFile(bufFile *BufFile, off int64, fileSize int64, client *oss.Client, fileName string) error { endOff := off + int64(bufFile.cacheSize) if endOff > fileSize { endOff = fileSize } _, reader, err := client.GetObjectRange(bufFile.bucket, fileName, off, endOff-1) log.Printf("q %d endoff %d \n", off, endOff-1) //callNum = callNum + 1 //if callNum > 1000000 { // return fmt.Errorf("call num exceed!") //} data := make([]byte, endOff-off) if err != nil { log.Printf("make failed!len(data):%d, endoff:%d, off:%d", len(data), endOff, off) return err } num := 0 for { l, err := reader.Read(data[num:]) if err != nil && err != io.EOF { log.Printf("reader.Read failed len(data):%d, num:%d\n", err, len(data), num) return err } num = num + l if num == len(data) { bufFile.data = data bufFile.endOff = endOff bufFile.off = off bufFile.size = int(endOff - off) return nil } } }