diff options
| author | Petter Rasmussen | 2016-01-17 21:13:46 +0100 |
|---|---|---|
| committer | Petter Rasmussen | 2016-01-17 21:13:46 +0100 |
| commit | f35fd0892688ff638b30dcd48fdd56b9e2627cf1 (patch) | |
| tree | 18439804fdb5c87e4ba0f4cea4561db35bdd7868 /drive/upload.go | |
| parent | f16b89b6f6bee6023c51b4f8120a3e4776128384 (diff) | |
| download | gdrive-f35fd0892688ff638b30dcd48fdd56b9e2627cf1.tar.bz2 | |
One file per command
Diffstat (limited to 'drive/upload.go')
| -rw-r--r-- | drive/upload.go | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/drive/upload.go b/drive/upload.go new file mode 100644 index 0000000..ed373ef --- /dev/null +++ b/drive/upload.go @@ -0,0 +1,62 @@ +package drive + +import ( + "fmt" + "mime" + "os" + "path/filepath" + "google.golang.org/api/drive/v3" + "golang.org/x/net/context" +) + +type UploadFileArgs struct { + Path string + Name string + Parent string + Mime string + Recursive bool + Stdin bool + Share bool +} + +func (self *Drive) Upload(args UploadFileArgs) { + //if args.Stdin { + // self.uploadStdin() + //} + + srcFile, err := os.Open(args.Path) + errorF(err, "Failed to open file: %s", err) + + srcFileInfo, err := srcFile.Stat() + errorF(err, "Failed to read file metadata: %s", err) + + // Instantiate empty drive file + dstFile := &drive.File{} + + // Use provided file name or use filename + if args.Name == "" { + dstFile.Name = filepath.Base(srcFileInfo.Name()) + } else { + dstFile.Name = args.Name + } + + // Set provided mime type or get type based on file extension + if args.Mime == "" { + dstFile.MimeType = mime.TypeByExtension(filepath.Ext(dstFile.Name)) + } else { + dstFile.MimeType = args.Mime + } + + // Set parent folder if provided + if args.Parent != "" { + dstFile.Parents = []string{args.Parent} + } + + f, err := self.service.Files.Create(dstFile).ResumableMedia(context.Background(), srcFile, srcFileInfo.Size(), dstFile.MimeType).Do() + errorF(err, "Failed to upload file: %s", err) + + fmt.Printf("Uploaded '%s' at %s, total %d\n", f.Name, "x/s", f.Size) + //if args.Share { + // self.Share(TODO) + //} +} |
