1
votes

Fichier d'importation de l'API Google Drive à partir de la chaîne

Est-il possible de télécharger une chaîne sur Google Drive au lieu du fichier lui-même? Dans cet exemple , le script suppose qu'il existe un fichier physique 'fichiers / photo.jpg' . Comment puis-je télécharger un fichier csv ou json sans qu'il soit physiquement localisé sur ma machine?

Voici ce que contient l'exemple ci-dessus

folder_id = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E'
file_metadata = {
    'name': 'photo.jpg',
    'parents': [folder_id]
}
media = MediaFileUpload('files/photo.jpg',
                        mimetype='image/jpeg',
                        resumable=True)
file = drive_service.files().create(body=file_metadata,
                                    media_body=media,
                                    fields='id').execute()
print 'File ID: %s' % file.get('id')

Mais au lieu d'un file 'files / photo.jpg' Je souhaite télécharger {'somekey': 'somevalue'} en tant que fichier json.


5 commentaires

Pouvez-vous fournir votre script actuel?


@Tanaike Mon script actuel est similaire à celui de l'exemple ci-dessus


Merci d'avoir répondu et mis à jour votre question. J'ai proposé un script modifié comme réponse. Pouvez-vous le confirmer? Si j'ai mal compris votre question et que ce n'est pas le résultat souhaité, je m'en excuse.


Ma réponse vous a-t-elle montré le résultat souhaité? Pouvez-vous m'en parler? Cela m'est également utile d'étudier. Si cela fonctionne, d'autres personnes qui ont le même problème avec vous peuvent également baser votre question comme une question qui peut être résolue. Si vous avez encore des problèmes pour ma réponse, je vous présente mes excuses. À ce moment-là, puis-je vous interroger sur votre situation actuelle? Je voudrais étudier pour résoudre vos problèmes.


Merci pour votre réponse.


3 Réponses :


0
votes

La méthode la plus simple consiste à écrire cette chaîne JSON dans un fichier local (peut-être dans / tmp) et à la télécharger.


0 commentaires

1
votes
  • Vous souhaitez importer la valeur de la chaîne sous forme de fichier CSV ou JSON.
  • Vous souhaitez y parvenir en utilisant google-api-python-client avec Python.
  • Si je comprends bien, qu'en est-il de cette modification? Veuillez considérer ceci comme l’une des nombreuses réponses.

    Script modifié:

    Lorsque vous utilisez ceci, veuillez définir folder_id .

    mimeType = 'text/csv'
    text = 'a1, b1, c1\na2, b2, c2'
    media = MediaIoBaseUpload(io.BytesIO(text.encode('utf-8')), mimetype=mimeType, resumable=True)
    
    file_metadata = {'name': 'sampleName', 'parents': [folder_id], 'mimeType': mimeType}
    file = drive_service.files().create(body=file_metadata,
                                        media_body=media,
                                        fields='id').execute()
    

    Remarque:

    • Cet exemple de script suppose que vous avez déjà pu importer des fichiers à l'aide de l'API Drive.
    • Si vous souhaitez télécharger du texte en tant que fichier JSON. Veuillez modifier le mimeType et le texte.

    Références :


0 commentaires

0
votes

Pour ceux qui recherchent un moyen de télécharger un fichier que vous recevez de votre frontend dans votre backend et que vous souhaitez le télécharger, voici un exemple.

Le cas suivant est, j'envoie un fichier texte depuis mon frontend application en utilisant formdata et en le recevant sur le backend. Maintenant, ce fichier, je veux télécharger sur Google Drive.

La pile technologique que j'utilise est Angular 8 pour le frontend et Tornado Python pour le backend.

Backend Python Code: p>

import io
from googleapiclient.discovery import build
from googleapiclient.http import MediaIoBaseUpload
from gdrive_config import credentials # Import your credentials object created using a service account 
# Refer this link for more info - https://github.com/googleapis/google-api-python-client/blob/master/docs/oauth-server.md

drive_service = build("drive", "v3", credentials=credentials, cache_discovery=False)

file = self.request.files
file_info = file["my_text_file"][0] # Here "my_text_file" is the key name you have set in form data

def upload_file(file_info):
    file_name = file_info["filename"]

    file_metadata = {
        "name": file_name,
        "mimeType": "text/plain", # Mimetype for text file
    }
    # If you print file_info, you will notice your text file data will be in the body & of type bytes.

    media = MediaIoBaseUpload(io.BytesIO(file_info["body"]), # **Pass your bytes object/string here.
                              mimetype="application/vnd.google-apps.document", # I'm converting text file to native google docs.
    # Keep the mimetype "text/plain", if you want to upload it as a text file itself.
                              resumable=True)

    file = drive_service.files().create(body=file_metadata,
                                        media_body=media,
                                        fields="id, name").execute()

    print("Uploaded File '{}' with ID: {}".format(file.get("name"), file.get("id")))

Liens de référence:

Flux Oauth pour les comptes de service - https://github.com/googleapis/google-api-python-client/blob/master/docs/oauth-server.md

Documentation du client python Google Drive - https://developers.google.com/resources/api-libraries/documentation/drive/v3/python/latest/drive_v3.files.html

Guide des fichiers de téléversement Google Drive - https://developers.google.com / drive / api / v3 / manage-uploads


0 commentaires