Is è possibile ottenere un allegato di posta elettronica in blobstore di App Engine?

StackOverflow https://stackoverflow.com/questions/2531133

  •  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'})
È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top