Pertanyaan Bagaimana cara mengunduh file dengan nama file aslinya dari GAE's blobstore?


Setelah Anda mengunggah file ke blobstore, ia akan mengganti namanya menjadi seperti "s9QmBqJPuiVzWbySYvHVRg ==". Jika Anda menavigasi ke "/ melayani" URL untuk mengunduh file, file yang diunduh diberi nama jumble of letters ini.

Apakah ada cara agar file yang diunduh tetap memiliki nama file aslinya ketika diunggah?


4
2017-08-30 16:01


asal


Jawaban:


Ketika file diunggah menggunakan BlobUploadHandler nama file asli disimpan sebagai nama properti di yang baru dibuat BlobInfo kesatuan.

Di dalam blob serve handler, Anda dapat menentukan bahwa blob harus dikembalikan sebagai lampiran unduhan, dan Anda dapat menentukan dengan nama apa itu harus disimpan dengan

from google.appengine.ext import webapp
import urllib

class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
  def get(self, blob_info_key=None):
    blob_info_key = str(urllib.unquote(blob_info_key))
    blob_info = retrieve_blob_info(blob_info_key)
    self.send_blob(blob_info, save_as=blob_info.filename)


blob_app = webapp.WSGIApplication([
  ('/_s/blob/([^/]+)', blob.ServeHandler),
], debug=config.DEBUG)

6
2017-08-30 17:10



Di admin GAE menghibur, BLOB viewer section, ketika Anda melihat BLOB individu ada tombol unduh di kanan bawah penampil, seperti yang ditunjukkan pada gambar di bawah.

enter image description here


0
2017-08-30 16:55



Kode yang Anda rujuk adalah kunci dari entitas BlobInfo, tetapi nama file aslinya disimpan sebagai properti.

Jika Anda ingin cara sederhana untuk mengunduh file dengan nama file, Anda dapat menggunakan kode ini yang saya gunakan untuk ServeHandler saya, ia berfungsi untuk kebutuhan saya, mengunduh file dengan nama file, bukan kunci blobstore:

class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
  def get(self, resource):
    blobs = blobstore.BlobInfo.gql("WHERE filename = '%s'" %(urllib.unquote(resource)))
    if blobs.count(1) > 0:
        blob_info = blobstore.BlobInfo.get(blobs[0].key())
        self.send_blob(blob_info,save_as=True) 

0
2018-05-12 23:47