1

Google App Engine でプロジェクトを作成しています。ここでは、ファイルをブロブストアにアップロードしようとしています。複数のフォームを含む html ファイルがあり、各フォームにはファイルアップロードボタンがあります

<input type="file">

ユーザーがこのボタンを使用してファイルを選択するとすぐに、ファイルは GAE blobstore へのアップロードを開始する必要があります。
このアップロードを行うことができる Python コードがありますが、閲覧したファイルにバックエンド (Python) コードをリンクすることができません。また、複数のフォームがあるため、ページを更新してはいけません。

Googleクロージャーで(ポップアップを使用して)ページを更新する解決策を見つけましたが、それは私のプロジェクトでは望ましくありません。クロージャライブラリには他に方法はないと思います。

私は ajax 呼び出しを使用してそれを実行しようとしていますが、ajax に関する知識が非常に限られているため、望ましい結果を得ることができません。

JQUERY の使用はオプションではありません。

私の質問が明確であることを願っています。そうでない場合は元に戻してください。

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

2

Google Closure は、(ページを更新せずに) ファイルを投稿できる IframeIo クラスを提供します。ドキュメントはhttp://closure-library.googlecode.com/svn/docs/class_goog_net_IframeIo.html

IframeIo (BSD ライセンスで利用可能) にラッパーを実装して、ユーザーがファイルを選択したときに、ファイルのアップロード入力と URL への投稿を表示します。https://code.google.com/p/prestans/source/browse/trunk/client/closure/ui/IframeFileUpload.jsで入手可能なソース

Blobstore ファイル アップロード ハンドラから返される内容に応じて、成功 / 失敗コードの処理は少し複雑です。

于 2012-07-04T04:47:41.763 に答える
1

私が使用したのは、入力/ファイル コントロールの onchange を使用することです。onChange は、コントロールと MIME タイプを返します。onchange 内から、コントロールのファイルリスト配列にアクセスして、ファイル名を取得できます。ファイル名を使用すると、FileReader を使用して実際のデータをロードできます。このデータは、xhr ポストを使用して (および base64 に変換して) サーバーにアップロードできます。何かのようなもの:

function onChange(control, mimetype) {
var f = control.files;
if (f.length) {
  var reader = new FileReader;
  reader.onload = function() {
    // Post using xhr
  }
  reader.readAsBinaryString(f)
}

FileReader オブジェクトはすべてのブラウザーに存在するわけではありません... (Chrome はサポートしています!)

于 2012-07-03T22:33:25.623 に答える