diff options
Diffstat (limited to 'drive/upload.go')
| -rw-r--r-- | drive/upload.go | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/drive/upload.go b/drive/upload.go index c42bebd..dbf068c 100644 --- a/drive/upload.go +++ b/drive/upload.go @@ -22,6 +22,7 @@ type UploadArgs struct { Share bool Delete bool ChunkSize int64 + Timeout time.Duration } func (self *Drive) Upload(args UploadArgs) error { @@ -89,10 +90,12 @@ func (self *Drive) uploadRecursive(args UploadArgs) error { if info.IsDir() { args.Name = "" return self.uploadDirectory(args) - } else { + } else if info.Mode().IsRegular() { _, _, err := self.uploadFile(args) return err } + + return nil } func (self *Drive) uploadDirectory(args UploadArgs) error { @@ -173,13 +176,16 @@ func (self *Drive) uploadFile(args UploadArgs) (*drive.File, int64, error) { progressReader := getProgressReader(srcFile, args.Progress, srcFileInfo.Size()) // Wrap reader in timeout reader - reader, ctx := getTimeoutReaderContext(progressReader) + reader, ctx := getTimeoutReaderContext(progressReader, args.Timeout) fmt.Fprintf(args.Out, "Uploading %s\n", args.Path) started := time.Now() f, err := self.service.Files.Create(dstFile).Fields("id", "name", "size", "md5Checksum", "webContentLink").Context(ctx).Media(reader, chunkSize).Do() if err != nil { + if isTimeoutError(err) { + return nil, 0, fmt.Errorf("Failed to upload file: timeout, no data was transferred for %v", args.Timeout) + } return nil, 0, fmt.Errorf("Failed to upload file: %s", err) } @@ -198,6 +204,7 @@ type UploadStreamArgs struct { Share bool ChunkSize int64 Progress io.Writer + Timeout time.Duration } func (self *Drive) UploadStream(args UploadStreamArgs) error { @@ -223,13 +230,16 @@ func (self *Drive) UploadStream(args UploadStreamArgs) error { progressReader := getProgressReader(args.In, args.Progress, 0) // Wrap reader in timeout reader - reader, ctx := getTimeoutReaderContext(progressReader) + reader, ctx := getTimeoutReaderContext(progressReader, args.Timeout) fmt.Fprintf(args.Out, "Uploading %s\n", dstFile.Name) started := time.Now() f, err := self.service.Files.Create(dstFile).Fields("id", "name", "size", "webContentLink").Context(ctx).Media(reader, chunkSize).Do() if err != nil { + if isTimeoutError(err) { + return fmt.Errorf("Failed to upload file: timeout, no data was transferred for %v", args.Timeout) + } return fmt.Errorf("Failed to upload file: %s", err) } |
