Reputation: 442
I'm uploading a file from one GDrive account to another, using PyDrive. I can download the file fine, but then when I go to upload it, I get a 400.
pydrive.files.ApiRequestError: <HttpError 400 when requesting https://www.googleapis.com/upload/drive/v2/files?alt=json&uploadType=resumable returned "Bad Request">
This is the ListFolder code:
def ListFolder(parent, drive1, drive2):
filecount = 0
filelist=[]
file_list = drive1.ListFile({'q': "'%s' in parents and trashed=false" % parent}).GetList()
for f in file_list:
filecount +=1
print("Still working %s" % filecount)
if f['mimeType']!='application/vnd.google-apps.folder': # if regular file
print("I've found a file - passing %s to download" % f['title'])
download_file(drive1, f, drive2) # Download the file
Here is the download file code:
def download_file(drive1, f, drive2):
"""This function will download a file from the source drive1 to the local hard drive, just before uploading it to the destination drive- i.e. drive2"""
dirpath = tempfile.mkdtemp()
print ("Downloading a file %s" % f['title'])
filesource = drive1.CreateFile({'id': f['id']})
filesource.GetContentFile(f['title'], f['mimeType'])
upload_file(drive2, f)
os.remove(f['title'])
drive2 is a GoogleDrive instance (with auth passed). f is an item in a file_list that is not a folder.
def upload_file(drive2, f):
#Will copy files over until it detects a directory
""""This function accepts the destination drive, filetitle (which has previously been downloaded from download_file function) and the file mimetype. This function uploads the local file to the destination drive"""
filename = f['title']
print("file title: %s" % f['title']) #filetitle)
file = drive2.CreateFile()
file.SetContentFile(f['title'])
file.Upload()
I've tried using a string to upload the file, but still get the same results. What else should I be looking for?
Upvotes: 1
Views: 1439
Reputation: 17613
here's the download snippet from the export files guide:
file_id = '1ZdR3L3qP4Bkq8noWLJHSr_iBau0DNT4Kli4SxNc2YEo'
request = drive_service.files().export_media(fileId=file_id,
mimeType='application/vnd.google-apps.document')
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
print "Download %d%%." % int(status.progress() * 100)
Upvotes: 1