1

同様の質問をいくつか読んでいますが、実装できる答えを見つけることができませんでした。私は Google App Engine を使用しており、unicodecsv を使用して単純な CSV エクスポートを行っていますが、これは正常に機能します。このエクスポートは毎日実行され、毎回同じ Blobstore アイテムとして結果が保存されるため、同じ URL から取得できます。

これが Blobstore アイテムの最初の意図ではないことはわかっていますが、それが機能するようになった記事もいくつか読みました。残念ながら、私はそれほど経験豊富なプログラマーではないため、自分の状況ではそれを使用できませんでした。誰かがこれを実現する方法について私に意見を与えることができれば素晴らしいでしょう.

class ShopExport(webapp2.RequestHandler):
  def get(self):
    shops = Shop.all()
    self.response.headers[str('Content-Type')] = str('application/csv')
    self.response.headers[str('Content-Disposition')] = str('attachment; filename="shops.csv"')
    writer = unicodecsv.writer(self.response.out, encoding='utf-8')
    writer.writerow(["id", "name", "domain", "category", "deeplink"])
    for shop in shops:
      writer.writerow(["'"+shop.keyname+"'", "'"+shop.name+"'", "'"+shop.url+"'", "'"+shop.category+"'", "'"+shop.url_aff+"'"])
4

2 に答える 2

4

Tim が指摘したように、ブロブストア エンティティを上書きすることはできませんが、毎回新しいエンティティを作成し、新しいエンティティを提供するためのキーを覚えておくことができます。

class BlobKey(db.Model) :
    blob_key = db.StringProperty()

次に、cron ハンドラーで次のことができます。

blob_key = BlobKey.all().get()
blob = blobstore.get(blob_key)
if blob : blob.delete()
db.delete( blob_key )    # you don't need it anymore

file_name = files.blobstore.create( mime_type = 'text/csv')
with files.open(file_name, 'a') as f:
    f.write( your_content )

files.finalize(file_name)
blob_key = files.blobstore.get_blob_key(file_name)

BlobKey( blob_key = str(blob_key) ).put()   # save the new key

そして最後に、ファイルを ( でBlobstoreDownloadHandler) 提供するときは、次のようにします。

blob_key = BlobKey.all().get()
if blobstore.get(blob_key):
    self.send_blob(blobstore.BlobInfo.get(blob_key),
        content_type = 'text/csv', save_as=True)    # False to mangle file name
else:
    self.error(404)
于 2013-03-24T04:48:21.550 に答える
1

ブロブ ストア エンティティは上書きできず、削除のみできます。ブロブ ストア キーを制御することはできないため、現在のブロブ ストア URL へのリダイレクトを使用して、アプリで URL を保持/管理する必要があります。ブロブ ストアへの書き込みについては、ファイル API を参照してください。

https://developers.google.com/appengine/docs/python/blobstore/overview#Writing_Files_to_the_Blobstore

于 2013-03-24T00:33:56.393 に答える