Domanda

Attualmente uso il seguente codice per consentire ai miei utenti di caricare file;

uploadurl = blobstore.create_upload_url('/process?session=' + session, gs_bucket_name='mybucketname')
.

E posso servire immagini come questa;

imgurl = get_serving_url(blob_key, size=1600, crop=False, secure_url=True)
.

DOPO IL CONTENUTO viene caricato utilizzando il metodo nel primo codice tagliato, il tasto BLOB contiene encoded_gs_file: ed è così che sa di servirlo da Google Cloud Service e non del Blobstore come standard.

Tuttavia, non sono sicuro di come servirei qualsiasi altro tipo di file (ad esempio .pdf o .rtf).I non Volete che il contenuto venga visualizzato nel browser, ma piuttosto inviato al client come download (in modo da ottenere la finestra di dialogo Salva file e scegli una posizione sul loroComputer per salvarlo).

Come dovrei andare a fare questo?Grazie.

È stato utile?

Soluzione

Utilizzo di Google Serving_url funziona solo per le immagini.

Per servire un PDF dal Blobstore è possibile utilizzare:

class DynServe(blobstore_handlers.BlobstoreDownloadHandler):

    def get(self, resource):

        (blob_key, extension) = resource.rpartition('.')[::2]
        blob_info = blobstore.BlobInfo.get(blob_key)
        if not blob_info:
            logging.error('Blob NOT FOUND %s' % resource)
            self.abort(404)

        self.response.headers[b'Content-Type'] = mimetypes.guess_type(blob_info.filename)
        self.send_blob(blob_key, save_as=blob_info.filename)
.

Il percorso WebApp2 per questo gestore sembra:

webapp2.Route(r'/dynserve/<resource:(.*)>', handler=DynServe)
.

Per servire:

<a href="/dynserve/<blob_key>.pdf">PDF download</a>
.

Altri suggerimenti

Ho intenzione di rispondere alla mia domanda basata sulla risposta da @voscausa

Questo è ciò che sembra il mio gestore (all'interno di un file denominato view.py);

class DynServe(blobstore_handlers.BlobstoreDownloadHandler):
def get(self, resource):
    blob_key = resource

    if not blobstore.get(blob_key):
        logging.warning('Blob NOT FOUND %s' % resource)
        self.abort(404)
        return
    else:
        blob_info = blobstore.BlobInfo.get(blob_key)

    self.send_blob(blob_key, save_as=blob_info.filename)    
.

abbiamo bisogno di questo in app.yaml;

- url: /download/.*
script: view.app
secure: always
.

secure: always è facoltativo, ma lo uso sempre durante la manipolazione dei dati dell'utente.

mettilo in fondo al view.py;

app = webapp.WSGIApplication([('/download/([^/]+)?', DynServe),
                                 ], debug=False)
.

Ora Visita / Download / Blob_Key_Here.(Puoi controllare il DataStore per il tuo tasto BLOB)

Questo è un esempio completamente funzionante che funziona sia con il negozio Blob standard che con il servizio cloud di Google.

Nota: tutte le chiavi BLOB che fanno parte del GCS inizieranno con encoded_gs_file: e quelle che non sono nel Blobstore standard;L'app Motore utilizza automaticamente questo per determinare dove individuare il file

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