|
- package iterator
-
- import (
- "io"
- "os"
- "path/filepath"
- "strings"
- )
-
- type UploadingObjectIterator = Iterator[*IterUploadingObject]
-
- type LocalUploadingIterator struct {
- pathRoot string
- filePathes []string
- currentIndex int
- }
-
- type IterUploadingObject struct {
- Path string
- Size int64
- File io.ReadCloser
- }
-
- func NewUploadingObjectIterator(pathRoot string, filePathes []string) *LocalUploadingIterator {
- return &LocalUploadingIterator{
- pathRoot: filepath.ToSlash(pathRoot),
- filePathes: filePathes,
- }
- }
-
- func (i *LocalUploadingIterator) MoveNext() (*IterUploadingObject, error) {
- if i.currentIndex >= len(i.filePathes) {
- return nil, ErrNoMoreItem
- }
-
- item, err := i.doMove()
- i.currentIndex++
- return item, err
- }
-
- func (i *LocalUploadingIterator) doMove() (*IterUploadingObject, error) {
- path := i.filePathes[i.currentIndex]
-
- info, err := os.Stat(path)
- if err != nil {
- return nil, err
- }
-
- file, err := os.Open(path)
- if err != nil {
- return nil, err
- }
-
- return &IterUploadingObject{
- Path: strings.TrimPrefix(filepath.ToSlash(path), i.pathRoot+"/"),
- Size: info.Size(),
- File: file,
- }, nil
- }
-
- func (i *LocalUploadingIterator) Close() {
-
- }
|