Is è possibile ottenere un allegato di posta elettronica in blobstore di App Engine?
-
22-09-2019 - |
Domanda
Sono riuscito a ottenere gli allegati email Onto Amazon S3 da una e-mail in entrata GAE, ma qualcuno sa una tecnica per ottenere un allegato, come un'immagine, nella blobstore.
Qualsiasi aiuto sarebbe molto apprezzato.
Codice finora (con l'aiuto di Alex)
upload_url = blobstore.create_upload_url('/upload')
msg = MIMEMultipart()
msg.set_type('multipart/form-data')
msg.set_payload({'file': content})
result = urlfetch.fetch(upload_url, payload=urllib.urlencode(msg), method=urlfetch.POST, headers={'Content-Type': 'multipart/form-data'})
Soluzione
App Engine (versione 1.4.3) è possibile direttamente scrivere i dati al blobstore .
Non è più necessario utilizzare il metodo di caricamento URL.
Altri suggerimenti
Per ricevere la posta nel vostro GAE app, seguire la documentazione qui : in particolare, si otterrà un'istanza della classe InboundEmailMessage
con un attributo attachments
che, e cito:
è una lista di file allegati, eventualmente vuoto. Ogni valore nella lista è una tupla di due elementi: la filename e il file di contenuti.
Quindi, per questi documenti GAE , "creare un URL di upload" e nel vostro gestore di upload (tipicamente una sottoclasse di BlobstoreUploadHandler ) si utilizza get_upload
per ottenere BlobInfo istanze e mettere la loro metadati da qualche parte che poi permetterà di prenderli indietro come la vostra applicazione può richiedere.
Infine, è POST
i dati (che si ha da attachments
, sopra) per il proprio appena generato "URL Upload", ad esempio, utilizzando urlfetch.fetch (con method-POST
e un carico utile in application/x-www-form-urlencoded
di serie codifica per la "forma" che l'utente sarebbe compilando se fossero il caricamento dei dati direttamente, che è il modo "normale" per inserire i dati nel blobstore - ad esempio, è possibile utilizzare urllib.urlencode per preparare il carico utile).
Questa "auto-POST" sarà utilizzando un'altra istanza della vostra app per "ricevere" i dati nel blobstore (mentre l'istanza che ha ricevuto le attese di posta elettronica, come fetch
è sincrona).