Python: How to upload files to a specific folder in Google Drive using folderId
Solution 1
I believe you should send a metadata JSON including a parents
filed.
Something like:
{
"parents" : [path_id]
}
You can try this API here: https://developers.google.com/drive/v2/reference/files/insert
Solution 2
Two steps are required to resolve this issue:
-
Get folder id:
folder_list = self.drive.ListFile({'q': "trashed=false"}).GetList() for folder in folder_list: print 'folder title: %s, id: %s' % (folder['title'], folder['id'])
-
After found the ID Of required folder, Use this func:
def upload_file_to_specific_folder(self, folder_id, file_name): file_metadata = {'title': file_name, "parents": [{"id": folder_id, "kind": "drive#childList"}]} folder = self.drive.CreateFile(file_metadata) folder.SetContentFile(file_name) #The contents of the file folder.Upload()
Solution 3
in v3 just update file_metadata :
file_metadata = {'name': 'exmample_file.pdf', "parents": ["ID_OF_THE_FOLDER"]}
Solution 4
The way I achieve to put the file in the specific folder was by passing below info in metadata.
Here <someFolderID>
info can be retrieve as:
1. go to google drive
2. select the folder
3. observe the address bar it will have some value after https://drive.google.com/drive/folders/
{
"parents":[
"id": "<someFolderID>",
"kind": "drive#file"
]
}
Solution 5
for a concret sample
...
from googleapiclient import discovery
from apiclient.http import MediaFileUpload
...
drive_service = discovery.build('drive', 'v3', credentials=creds)
...
def uploadFile(filename, filepath, mimetype, folderid):
file_metadata = {'name': filename,
"parents": [folderid]
}
media = MediaFileUpload(filepath,
mimetype=mimetype)
file = drive_service.files().create(body=file_metadata,
media_body=media,
fields='id').execute()
print('File ID: %s' % file.get('id'))
#sample to use it:
filename = 'cible.png'
filepath = 'path/to/your/cible.png'
mimetype = 'image/png'
folderid = 'your folder id' #ex:'1tQ63546ñlkmulSaZtz5yeU5YTSFMRRnJz'
uploadFile(filename, filepath, mimetype, folderid)
Comments
-
AlvinJ almost 2 years
So I am in the process of trying to upload a file to a specific Google Drive folder that a user specifies. Below is the code I have tried. I get the folderID and I try to post a file to the folder however I get a
404 Not Found
error.def post_file(self, files_to_send, config = {}): if config: if type(config) is str: config = literal_eval(config) path_id = config.get('path') for file_to_send in files_to_send: filename = file_to_send.name.split('/')[-1] status = self.call.post('https://www.googleapis.com/upload/drive/v2/files?uploadType=media/' + str(path_id) + "/children")
Using the interface on the Drive API documentation, I am able to get data with the same folderID but I am not able to post (Even with the interface).
Files_to_send
is a list with all the files that I need to upload to the specific folder, andconfig
contains the folder path.I need help understanding what I am doing wrong. I have read the documentation and looked at other answer but I have not found a solution. When I don't specify the folder ID, a dummy file does get posted to my drive, but it doesn't upload the file I want, and it doesn't upload anything at all when I specifiy a folderID.
Essentially, I need help inserting a file that comes in to a specific folder in Google Drive.
Thanks!