diff --git a/filestore/filestore.go b/filestore/filestore.go index 163a5d6..a88601d 100644 --- a/filestore/filestore.go +++ b/filestore/filestore.go @@ -70,11 +70,6 @@ func (store FileStore) WriteChunk(id string, offset int64, src io.Reader) (int64 defer file.Close() n, err := io.Copy(file, src) - if n > 0 { - if err := store.setOffset(id, offset+n); err != nil { - return 0, err - } - } return n, err } @@ -84,8 +79,18 @@ func (store FileStore) GetInfo(id string) (tusd.FileInfo, error) { if err != nil { return info, err } - err = json.Unmarshal(data, &info) - return info, err + if err := json.Unmarshal(data, &info); err != nil { + return info, err + } + + stat, err := os.Stat(store.binPath(id)) + if err != nil { + return info, err + } + + info.Offset = stat.Size() + + return info, nil } func (store FileStore) GetReader(id string) (io.Reader, error) { @@ -109,20 +114,13 @@ func (store FileStore) ConcatUploads(dest string, uploads []string) (err error) } defer file.Close() - var bytesRead int64 - defer func() { - err = store.setOffset(dest, bytesRead) - }() - for _, id := range uploads { src, err := store.GetReader(id) if err != nil { return err } - n, err := io.Copy(file, src) - bytesRead += n - if err != nil { + if _, err := io.Copy(file, src); err != nil { return err } } @@ -193,19 +191,3 @@ func (store FileStore) writeInfo(id string, info tusd.FileInfo) error { } return ioutil.WriteFile(store.infoPath(id), data, defaultFilePerm) } - -// setOffset updates the .info file to match the new offset. -func (store FileStore) setOffset(id string, offset int64) error { - info, err := store.GetInfo(id) - if err != nil { - return err - } - - // never decrement the offset - if info.Offset >= offset { - return nil - } - - info.Offset = offset - return store.writeInfo(id, info) -}