drive: add --drive-alternate-export to fix large doc export - fixes #2243
The official drive APIs seem to have trouble downloading large documents sometimes. This commit adds a --drive-alternate-export flag to use an different, unofficial set of export URLS which seem to download large files OK.
This commit is contained in:
parent
9698a2babb
commit
f073db81b1
2 changed files with 33 additions and 9 deletions
|
@ -63,6 +63,7 @@ var (
|
||||||
driveUseCreatedDate = flags.BoolP("drive-use-created-date", "", false, "Use created date instead of modified date.")
|
driveUseCreatedDate = flags.BoolP("drive-use-created-date", "", false, "Use created date instead of modified date.")
|
||||||
driveListChunk = flags.Int64P("drive-list-chunk", "", 1000, "Size of listing chunk 100-1000. 0 to disable.")
|
driveListChunk = flags.Int64P("drive-list-chunk", "", 1000, "Size of listing chunk 100-1000. 0 to disable.")
|
||||||
driveImpersonate = flags.StringP("drive-impersonate", "", "", "Impersonate this user when using a service account.")
|
driveImpersonate = flags.StringP("drive-impersonate", "", "", "Impersonate this user when using a service account.")
|
||||||
|
driveAlternateExport = flags.BoolP("drive-alternate-export", "", false, "Use alternate export URLs for google documents export.")
|
||||||
// chunkSize is the size of the chunks created during a resumable upload and should be a power of two.
|
// chunkSize is the size of the chunks created during a resumable upload and should be a power of two.
|
||||||
// 1<<18 is the minimum size supported by the Google uploader, and there is no maximum.
|
// 1<<18 is the minimum size supported by the Google uploader, and there is no maximum.
|
||||||
chunkSize = fs.SizeSuffix(8 * 1024 * 1024)
|
chunkSize = fs.SizeSuffix(8 * 1024 * 1024)
|
||||||
|
@ -757,6 +758,18 @@ func (f *Fs) List(dir string) (entries fs.DirEntries, err error) {
|
||||||
}
|
}
|
||||||
obj := o.(*Object)
|
obj := o.(*Object)
|
||||||
obj.url = fmt.Sprintf("%sfiles/%s/export?mimeType=%s", f.svc.BasePath, item.Id, url.QueryEscape(exportMimeType))
|
obj.url = fmt.Sprintf("%sfiles/%s/export?mimeType=%s", f.svc.BasePath, item.Id, url.QueryEscape(exportMimeType))
|
||||||
|
if *driveAlternateExport {
|
||||||
|
switch item.MimeType {
|
||||||
|
case "application/vnd.google-apps.drawing":
|
||||||
|
obj.url = fmt.Sprintf("https://docs.google.com/drawings/d/%s/export/%s", item.Id, extension)
|
||||||
|
case "application/vnd.google-apps.document":
|
||||||
|
obj.url = fmt.Sprintf("https://docs.google.com/document/d/%s/export?format=%s", item.Id, extension)
|
||||||
|
case "application/vnd.google-apps.spreadsheet":
|
||||||
|
obj.url = fmt.Sprintf("https://docs.google.com/spreadsheets/d/%s/export?format=%s", item.Id, extension)
|
||||||
|
case "application/vnd.google-apps.presentation":
|
||||||
|
obj.url = fmt.Sprintf("https://docs.google.com/presentation/d/%s/export/%s", item.Id, extension)
|
||||||
|
}
|
||||||
|
}
|
||||||
obj.isDocument = true
|
obj.isDocument = true
|
||||||
obj.mimeType = exportMimeType
|
obj.mimeType = exportMimeType
|
||||||
obj.bytes = -1
|
obj.bytes = -1
|
||||||
|
|
|
@ -414,6 +414,17 @@ Here are the possible extensions with their corresponding mime types.
|
||||||
| xlsx | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | Microsoft Office Spreadsheet |
|
| xlsx | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | Microsoft Office Spreadsheet |
|
||||||
| zip | application/zip | A ZIP file of HTML, Images CSS |
|
| zip | application/zip | A ZIP file of HTML, Images CSS |
|
||||||
|
|
||||||
|
#### --drive-alternate-export ####
|
||||||
|
|
||||||
|
If this option is set this instructs rclone to use an alternate set of
|
||||||
|
export URLs for drive documents. Users have reported that the
|
||||||
|
official export URLs can't export large documents, whereas these
|
||||||
|
unofficial ones can.
|
||||||
|
|
||||||
|
See rclone issue [#2243](https://github.com/ncw/rclone/issues/2243) for background,
|
||||||
|
[this google drive issue](https://issuetracker.google.com/issues/36761333) and
|
||||||
|
[this helpful post](https://www.labnol.org/internet/direct-links-for-google-drive/28356/).
|
||||||
|
|
||||||
#### --drive-impersonate user ####
|
#### --drive-impersonate user ####
|
||||||
|
|
||||||
When using a service account, this instructs rclone to impersonate the user passed in.
|
When using a service account, this instructs rclone to impersonate the user passed in.
|
||||||
|
|
Loading…
Add table
Reference in a new issue