3

私のアプリには、クライアント側の画像操作が多く含まれています。ユーザーセッション中にファイルが頻繁に変更されるため、ユーザーが終了して画像の保存を選択するまで、ファイルをサーバーに物理的にアップロードしません。

画像はhtml5ファイルAPIを使用してクライアントから読み取られ、base64文字列としてメモリに保存され、ユーザーはそこですばやく効率的に操作を実行できます。

ユーザーが保存することを選択すると、標準のajax POSTを介して1つまたは複数の文字列をサーバーに転送し、サーバー側の物理ファイルにイメージを構築します。

私がやりたいのは、この最終アップロード段階のプログレスバーを提供することです。

今、私はhtml5仕様にファイルアップロードの進行状況レポートのサポートが含まれていることをよく知っています。ただし、標準のアップロード方法は使用していません。代わりに、上記のように、画像は文字列として送信されます。

したがって、私の質問は実際には次のように要約されます。

A)単純な投稿(PHPサーバーサイド)中に送信された実際のバイトを実際に測定する方法はありますか?もしそうなら、私はすでにHTML5ファイルリーダーAPIからのバイト単位の画像サイズを持っているので、これは機能します。

B)とにかくない場合は、base64データをその場で実際のファイルに変換し、標準のhtml5アップロード方法で送信して、進行状況を報告できます。

どちらの場合も...もしそうなら、どのように?

よろしくお願いします。

4

2 に答える 2

2

Base64イメージをajax経由で送信する方が簡単です。Ajaxはコールバック関数と連動するため、何らかのインジケーターを使用して、ajaxが開始されたこと(つまり、ファイルのダウンロードが開始されたこと)をユーザーに通知します。完了すると、コールバック関数が実行されます。これで、インジケーターをオフにすることができます。

実際のバイトを測定する限り、ajaxを介して私はよくわかりません。

この方法

ajaxリクエストでプログレスバーの進行状況を表示する

それを推定することをお勧めします。私はそれをさらに一歩進めて、コールバックに10回以上かかる可能性があります(この平均を使用してプログレスバーを推定し、上記の90%のトリックも使用します)。

または、Base64テキストをエンコード/デコードする場合。

JavaScriptで文字列をBase64にエンコードするにはどうすればよいですか?

于 2012-12-17T19:18:36.550 に答える
1

使用しているサーバーテクノロジーに応じて、いくつかのオプションがあります。

  1. CometまたはJavascriptのロングポーリングを使用して、サーバーからのアップロードの進行状況を取得し、クライアント側から進行状況バーを更新します

  2. バックエンドで.Netテクノロジを使用している場合は、SignalRライブラリを調べてください。このライブラリは、サーバーとクライアント間のリアルタイム通信を提供するためのすべての配管を提供します。

于 2012-12-17T19:19:18.227 に答える