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.
3 Réponses :
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.
Si je comprends bien, qu'en est-il de cette modification? Veuillez considérer ceci comme l’une des nombreuses réponses.
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()
texte
en tant que fichier JSON. Veuillez modifier le mimeType et le texte. 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
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.