aboutsummaryrefslogtreecommitdiffstats
path: root/drive/upload.go
diff options
context:
space:
mode:
authorPetter Rasmussen2016-01-17 21:13:46 +0100
committerPetter Rasmussen2016-01-17 21:13:46 +0100
commitf35fd0892688ff638b30dcd48fdd56b9e2627cf1 (patch)
tree18439804fdb5c87e4ba0f4cea4561db35bdd7868 /drive/upload.go
parentf16b89b6f6bee6023c51b4f8120a3e4776128384 (diff)
downloadgdrive-f35fd0892688ff638b30dcd48fdd56b9e2627cf1.tar.bz2
One file per command
Diffstat (limited to 'drive/upload.go')
-rw-r--r--drive/upload.go62
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)
+ //}
+}