// Upload file to drive func UploadStdin(d *gdrive.Drive, input io.ReadCloser, title string, parentId string, share bool, mimeType string, convert bool) error { // File instance f := &drive.File{Title: title} // Set parent (if provided) if parentId != "" { p := &drive.ParentReference{Id: parentId} f.Parents = []*drive.ParentReference{p} } getRate := util.MeasureTransferRate() if convert { fmt.Printf("Converting to Google Docs format enabled\n") } info, err := d.Files.Insert(f).Convert(convert).Media(input).Do() if err != nil { return fmt.Errorf("An error occurred uploading the document: %v\n", err) } // Total bytes transferred bytes := info.FileSize // Print information about uploaded file printInfo(d, info, false) fmt.Printf("MIME Type: %s\n", mimeType) fmt.Printf("Uploaded '%s' at %s, total %s\n", info.Title, getRate(bytes), util.FileSizeFormat(bytes, false)) // Share file if the share flag was provided if share { err = Share(d, info.Id) } return err }
// Download file from drive func Download(d *gdrive.Drive, fileId string, stdout, deleteAfterDownload bool, format string, force bool) error { // Get file info info, err := d.Files.Get(fileId).Do() if err != nil { return fmt.Errorf("An error occurred: %v\n", err) } downloadUrl, extension, err := util.InternalDownloadUrlAndExtension(info, format) if err != nil { return err } // Measure transfer rate getRate := util.MeasureTransferRate() // GET the download url res, err := d.Client().Get(downloadUrl) if err != nil { return fmt.Errorf("An error occurred: %v", err) } // Close body on function exit defer res.Body.Close() // Write file content to stdout if stdout { io.Copy(os.Stdout, res.Body) return nil } fileName := fmt.Sprintf("%s%s", info.Title, extension) // Check if file exists if !force && util.FileExists(fileName) { return fmt.Errorf("An error occurred: '%s' already exists", fileName) } // Create a new file outFile, err := os.Create(fileName) if err != nil { return fmt.Errorf("An error occurred: %v\n", err) } // Close file on function exit defer outFile.Close() // Save file to disk bytes, err := io.Copy(outFile, res.Body) if err != nil { return fmt.Errorf("An error occurred: %s", err) } fmt.Printf("Downloaded '%s' at %s, total %s\n", fileName, getRate(bytes), util.FileSizeFormat(bytes, false)) if deleteAfterDownload { err = Delete(d, fileId) } return err }
func uploadFileWorker(id int, jobs <-chan JobInfo, results chan<- int) error { time.Sleep(time.Second) for j := range jobs { fmt.Println("Accepted job") if j.title == "" { j.title = filepath.Base(j.inputInfo.Name()) } if j.mimeType == "" { j.mimeType = mime.TypeByExtension(filepath.Ext(j.title)) } // File instance f := &drive.File{Title: j.title, MimeType: j.mimeType} // Set parent (if provided) if j.parentId != "" { p := &drive.ParentReference{Id: j.parentId} f.Parents = []*drive.ParentReference{p} } getRate := util.MeasureTransferRate() if j.convert { fmt.Printf("Converting to Google Docs format enabled\n") } info, err := j.d.Files.Insert(f).Convert(j.convert).ResumableMedia(context.Background(), j.input, j.inputInfo.Size(), j.mimeType).Do() if err != nil { return fmt.Errorf("An error occurred uploading the document: %v\n", err) } // Total bytes transferred bytes := info.FileSize // Print information about uploaded file printInfo(j.d, info, false) fmt.Printf("MIME Type: %s\n", j.mimeType) fmt.Printf("Uploaded '%s' at %s, total %s\n", info.Title, getRate(bytes), util.FileSizeFormat(bytes, false)) // Placeholder for results results <- 1 // Share file if the share flag was provided if j.share { err = Share(j.d, info.Id) } } fmt.Println("Worker terminating") return nil }
func uploadFile(d *gdrive.Drive, input *os.File, inputInfo os.FileInfo, fileId string, title string, parentId string, share bool, mimeType string, convert bool) error { if title == "" { title = filepath.Base(inputInfo.Name()) } if mimeType == "" { mimeType = mime.TypeByExtension(filepath.Ext(title)) } // File instance f := &drive.File{Title: title, MimeType: mimeType} // Set parent (if provided) if parentId != "" { p := &drive.ParentReference{Id: parentId} f.Parents = []*drive.ParentReference{p} } getRate := util.MeasureTransferRate() if convert { fmt.Printf("Converting to Google Docs format enabled\n") } var info *drive.File var err error if fileId == "" { info, err = d.Files.Insert(f).Convert(convert).ResumableMedia(context.Background(), input, inputInfo.Size(), mimeType).Do() } else { info, err = d.Files.Update(fileId, f).Convert(convert).Media(input).Do() } if err != nil { return fmt.Errorf("An error occurred uploading the document: %v\n", err) } // Total bytes transferred bytes := info.FileSize // Print information about uploaded file printInfo(d, info, false) fmt.Printf("MIME Type: %s\n", mimeType) fmt.Printf("Uploaded '%s' at %s, total %s\n", info.Title, getRate(bytes), util.FileSizeFormat(bytes, false)) // Share file if the share flag was provided if share { err = Share(d, info.Id) } return err }