Google App Engineでファイルをアップロードする
2023-09-19 06:42:02
質問
Visual Studio のプロジェクト ファイルをダウングレードできる Web アプリを作成しようと計画しています。しかし、Google App Engine は、ファイルのアップロードとフラット ファイルの Google サーバーへの保存を、以下の方法で受け付けているようです。
db.TextProperty
と
db.BlobProperty
.
これがどのように行われるのか、どなたかコードサンプル(クライアント側とサーバー側の両方)を提供していただけると幸いです。
どのように解決するのですか?
ここに完全な、動作するファイルがあります。 Google のサイトからオリジナルを引っ張ってきて、少し現実の世界に近づけるように修正しました。
注目すべき点がいくつかあります。
- このコードでは BlobStore API
-
のこの行の目的は ServeHandler クラスのこの行は、quot;fix" を行うためのものです。 キーを修正することです。 を取り除くためです。 ブラウザで発生した名前の混乱を取り除くためです (私は Chrome では観察されませんでした)。
blob_key = str(urllib.unquote(blob_key))
-
この最後にある "save_as" 節は重要です。 これは、ファイル名がブラウザに送信されるときに文字化けしないようにするためのものです。 これを削除して、何が起こるかを観察してください。
self.send_blob(blobstore.BlobInfo.get(blob_key), save_as=True)
グッドラック!
import os
import urllib
from google.appengine.ext import blobstore
from google.appengine.ext import webapp
from google.appengine.ext.webapp import blobstore_handlers
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app
class MainHandler(webapp.RequestHandler):
def get(self):
upload_url = blobstore.create_upload_url('/upload')
self.response.out.write('<html><body>')
self.response.out.write('<form action="%s" method="POST" enctype="multipart/form-data">' % upload_url)
self.response.out.write("""Upload File: <input type="file" name="file"><br> <input type="submit" name="submit" value="Submit"> </form></body></html>""")
for b in blobstore.BlobInfo.all():
self.response.out.write('<li><a href="/serve/%s' % str(b.key()) + '">' + str(b.filename) + '</a>')
class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
upload_files = self.get_uploads('file')
blob_info = upload_files[0]
self.redirect('/')
class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
def get(self, blob_key):
blob_key = str(urllib.unquote(blob_key))
if not blobstore.get(blob_key):
self.error(404)
else:
self.send_blob(blobstore.BlobInfo.get(blob_key), save_as=True)
def main():
application = webapp.WSGIApplication(
[('/', MainHandler),
('/upload', UploadHandler),
('/serve/([^/]+)?', ServeHandler),
], debug=True)
run_wsgi_app(application)
if __name__ == '__main__':
main()
関連
-
[解決済み] Google App EngineとGoogle Compute Engineの違いは何ですか?
-
[解決済み] Pythonのキャッシュライブラリはありますか?
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] virtualenvsはどこに作成するのですか?
-
[解決済み] PythonのRequestsモジュールを使ってWebサイトに "ログイン "するには?
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PILからopenCVフォーマットへの変換
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?