0

Ich habe den folgenden Code geschrieben, um ein Bild auf meine eigene Google Drive mit einem service account hochladen.Einfache API-Image-Upload auf Google Drive

Mein Code wird erfolgreich zurückgegeben und gibt mir eine ID zurück, aber auf meinem tatsächlichen Google Drive ist nichts zu sehen.

from django.conf import settings 
import os 

from apiclient.discovery import build 
from apiclient.http import MediaFileUpload 
from oauth2client.service_account import ServiceAccountCredentials 

def get_service(api_name, api_version, scope, key_file_location): 
    credentials = ServiceAccountCredentials.from_json_keyfile_name(key_file_location, scopes=scope) 
    service = build(api_name, api_version, credentials=credentials) 
    return service 


def setup_upload(): 
    scope = ['https://www.googleapis.com/auth/drive'] 
    key_file_location = os.path.join(os.path.dirname(settings.BASE_DIR), 'common/my-json-file.json') 
    service = get_service('drive', 'v3', scope, key_file_location) 

    file_path = os.path.join(os.path.dirname(settings.BASE_DIR), 'common/apple.png') 

    file_metadata = {'name': 'apple.png'} 
    media = MediaFileUpload(file_path, mimetype="image/png") 
    file = service.files().create(body=file_metadata, media_body=media, fields='id').execute() 
    print(file.get('id')) #this returns an actual ID 

setup_upload() 

Ich habe eine lange ID String zurück aus der letzten Zeile setup_upload() bekommen. Aber auf meinem tatsächlichen Google Drive ist nichts zu sehen. Ich erwarte, dass die Datei apple.png in meinem Home-Verzeichnis erscheint.

Was fehlt mir hier?

Antwort

0

Zitat von der tutorial Sie verknüpft zu: "Sie können die E-Mail-Adresse des Dienstkontos und geben Sie Zugriff auf ein Verzeichnis auf Ihrem Google-Laufwerk. Es wird dann in dieses Verzeichnis hochladen, aber Sie haben keinen Zugriff zu den Dateien. Sie müssen einen zweiten Schritt ausführen und sich persönlich die Erlaubnis geben, auf diese Dateien zuzugreifen, indem Sie die Dateiberechtigungen aktualisieren oder patchen. "

Haben Sie dem Dienstkonto Zugriff auf den Ort erteilt, an dem Sie die Datei schreiben möchten? Wenn Sie nicht angegeben haben, wohin die Datei hochgeladen werden soll, lädt das Dienstkonto die Datei möglicherweise in ein eigenes Laufwerk hoch.

+0

Vielen Dank für die Antwort. Könntest du erklären, wie genau ich dem Dienstkonto Zugriff auf den Ort geben kann, an den ich schreiben möchte? Ich dachte, die 'scope' -Variable wäre genug und würde automatisch in den root google drive-Ordner gehen. – qarthandso

0

Zusätzlich zur Antwort von @ user2705223, wenn Sie auf die hochgeladenen Dateien zugreifen möchten, müssen Sie sich über das Dienstkonto Zugriff auf diese Dateien gewähren. Überprüfen Sie, ob Sie über erfolgreiche Anmeldeinformationen verfügten, und autorisieren Sie das Dienstkonto mit dem richtigen Bereich. Sie können versuchen, dieser documentation zu folgen, um Ihnen zu helfen, die Berechtigung zu machen, API-Anfragen zu machen.