Die Beschreibung basiert auf der Annahme, dass die Datei vom Client in der Anwendung hochgeladen wird, die unter "GAE / Python" ausgeführt wird. Auf der Serverseite erstellte Datendateien (Datensicherung usw.) werden nicht gelesen / geschrieben. Es soll Clients die Möglichkeit geben, Dateien anzuhängen und herunterzuladen.
Die Beschreibung befindet sich auf einer Ebene, die Sie später verstehen können, sodass die detaillierte Erklärung nicht korrekt ist. Es kann auch zu Missverständnissen kommen, daher wäre es hilfreich, wenn Sie in diesem Fall darauf hinweisen könnten.
[Referenz: Siehe folgenden Artikel]
Um die URL für das Hochladen in Google Cloud Strage auszugeben, verwenden Sie "create_upload_url" wie bei der Behandlung von blobstore. Durch Hinzufügen von "gs_bucket_name =" als Option können Sie den in GCS erstellten Bucket angeben. Es wird möglich sein.
Die folgende Implementierung ist im Endpunktformat (ich gehe davon aus, dass die API für iOS ausgegeben wird). Extrahieren Sie nur die Teile, die GCS verwenden. Die Beschreibung des Endpunkts wird weggelassen.
ep_upload.py
#Einzigartige Klasse für Endpunkte
import GetUploadUrlResponse
from google.appengine.ext import blobstore
・
・
class GetUploadUrl():
def __init__(self, request):
self.response = None
def done(self):
# create_upload_Ändern Sie den Namen des GCS-Buckets in der URL in "gs"_bucket_Geben Sie in "Name" an
url = blobstore.create_upload_url('/uploaded',gs_bucket_name = 'bucket_name/path/')
return self.response = GetUploadUrlResponse(ret = 0,
url = url)
・
・
Wenn die Veröffentlichung der Datei an die ausgegebene URL abgeschlossen und der Upload in GCS abgeschlossen ist, wird die Anforderung einschließlich der Dateiinformationen an die unter "create_upload_url" angegebene Adresse benachrichtigt. Erhalten Sie die Benachrichtigung und registrieren Sie sie im DataStore mit Model usw., das die hochgeladene Datei verwaltet.
Es gibt die folgenden zwei Arten von Erfassungsmethoden, die von blobstore_handlers geerbt wurden.BlobstoreUploadHandler, um die hochgeladene Datei von der Anforderung abzurufen.
Beide sind in Bezug auf die Informationen der hochgeladenen Datei gleich, beachten Sie jedoch, dass die von ihnen behandelten Formate völlig unterschiedlich sind.
Bei Verwendung von get_upload: BlobInfo Bei Verwendung von get_file_infos: FileInfo
In meiner Implementierung (Umgebung?) Kann "get_file_infos" nicht heruntergeladen werden (ein Fehler tritt auf). Ich habe "get_upload" verwendet.
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')
・
・
Der Client bezieht sich auf das Verwaltungsmodell (in diesem Beispiel GsFile), das nach Abschluss des Uploads registriert wurde, und Stellen Sie eine Download-Anfrage mit den wichtigsten Informationen.
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)
・
・
Wenn Sie beim Herunterladen per Link aus dem Browser den Dateinamen so aufrufen, wie er ist, kann er nicht abgerufen werden, sodass er unter dem Namen des URL-Teils gespeichert wird. Wenn Sie den direkten Download vom Browser implementieren möchten, setzen Sie die Option "send_blob" (save_as).
self.send_blob(blob_info, save_as=True)
Legen Sie die Klasse fest, die jeder Anforderung entspricht (Mit Download können Sie den Schlüssel in die URL eingeben).
upload.py
・
・
APPLICATION = webapp.WSGIApplication([('/upload', UploadHandler),
('/download/([^/]+)?', DownloadHandler)])
app.yaml
- url: /(upload|download/.*)
script: upload.APPLICATION
Recommended Posts