La description suppose le téléchargement du fichier depuis le client dans l'application exécutée sur "GAE / Python". Il ne lit / n'écrit pas les fichiers de données créés côté serveur (sauvegarde de données, etc.). Il est destiné à ajouter la possibilité pour les clients de joindre et de télécharger des fichiers.
La description est à un niveau que vous pouvez comprendre plus tard, donc l'explication détaillée est interrompue. De plus, il peut y avoir des malentendus, il serait donc utile que vous puissiez le signaler dans ce cas.
[Référence: reportez-vous à l'article suivant]
Pour émettre l'URL de téléchargement vers Google Cloud Strage, utilisez "create_upload_url" comme dans la gestion de blobstore, mais en ajoutant "gs_bucket_name =" en option, vous pouvez spécifier le bucket créé sur GCS. Ce sera possible.
L'implémentation suivante est au format de point de terminaison (je suppose que l'API pour iOS sera sortie). Extrayez uniquement les pièces qui utilisent GCS. La description du point de terminaison est omise.
ep_upload.py
#Classe unique pour les terminaux
import GetUploadUrlResponse
from google.appengine.ext import blobstore
・
・
class GetUploadUrl():
def __init__(self, request):
self.response = None
def done(self):
# create_upload_Remplacez le nom du bucket GCS par "gs" dans l'URL_bucket_Précisez dans "nom"
url = blobstore.create_upload_url('/uploaded',gs_bucket_name = 'bucket_name/path/')
return self.response = GetUploadUrlResponse(ret = 0,
url = url)
・
・
Lorsque la publication du fichier sur l'URL émise est terminée et que le téléchargement vers GCS est terminé, la demande comprenant les informations sur le fichier est notifiée à l'adresse spécifiée dans "create_upload_url". Recevez la notification et enregistrez-la dans le DataStore avec Model etc. qui gère le fichier téléchargé.
Il existe les deux types suivants de méthodes d'acquisition héritées de blobstore_handlers.BlobstoreUploadHandler pour l'acquisition de fichiers téléchargés à partir de requêtes.
Les deux sont les mêmes en termes d'informations sur le fichier téléchargé, mais notez que les formats qu'ils gèrent sont complètement différents.
Lors de l'utilisation de get_upload: BlobInfo Lors de l'utilisation de get_file_infos: FileInfo
Dans mon implémentation (environnement?), Si "get_file_infos" est utilisé, il ne sera pas possible de télécharger (une erreur se produira). J'ai utilisé "get_upload".
upload.py
import webapp
from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers
from models import GsFile
・
・
class UploadHandler(blobstore_handlers.BlobstoreUploadHandler,webapp.RequestHandler):
def post(self):
blob_infos = self.get_uploads('file')
if not isinstance(blob_infos, list):
blob_infos = [blob_infos]
for blob_info in blob_infos:
GsFile.create( filename = blob_info.filename
content_type = blob_info.content_type
size = blob_info.size
key = str(blob_info.key()))
self.response.write('0')
・
・
Le client fait référence au modèle de gestion (GsFile dans cet exemple) enregistré lorsque le téléchargement est terminé, et Faites une demande de téléchargement avec les informations clés.
upload.py
・
・
class ContentDownload(blobstore_handlers.BlobstoreDownloadHandler):
def get(self, key):
key = str(urllib.unquote(key))
blob_info = blobstore.BlobInfo.get(key)
self.send_blob(blob_info)
・
・
Lors du téléchargement par lien depuis le navigateur, si vous l'appelez tel quel, le nom du fichier ne peut pas être obtenu, il sera donc enregistré avec le nom de la partie URL. Si vous souhaitez implémenter le téléchargement direct depuis le navigateur, définissez l'option "send_blob" (save_as).
self.send_blob(blob_info, save_as=True)
Définir la classe correspondant à chaque requête (Télécharger permet de saisir la clé sur l'URL)
upload.py
・
・
APPLICATION = webapp.WSGIApplication([('/upload', UploadHandler),
('/download/([^/]+)?', DownloadHandler)])
app.yaml
- url: /(upload|download/.*)
script: upload.APPLICATION
Recommended Posts