3

コンテキスト:アイテムを一覧表示するプロセスの一部として、ユーザーが画像をアップロードするサイトを構築しています。見た目に美しいだけでなく、ユーザーがアイテムをアップロードして説明するのに役立つため、アップロードフォームに画像のプレビューを表示したいと思います。

問題: ブラウザのサンドボックス化のため、画像のプレビューを表示するには、サーバーにアップロードする必要があります(ファイル入力フォームを送信しない限り、画像データをJSに取得できません)。ただし、画像を整理するために、ユーザーが入力したデータに基づく識別子を使用して画像を保存します(この場合、名前をサニタイズし、ファイル名として/ useruploads / user_idフォルダーに使用します)。

ユーザー入力(つまり、ファイルのsha1)の依存関係を取り除くためにファイルの命名スキームを変更することはできますが、s3へのアップロードとイメージのサイズ変更はコストのかかる操作であり、リソースを不必要に拘束したくありません。サイズを変更してサムネイルを生成せずに画像をアップロードすると、アイテムに関する情報を含むフォームが送信された後、アプリケーションはS3からデータをストリーミングし、サイズを変更してサムネイルを生成してから、画像を再アップロードする必要があります。 、これはやや回り道のようです。

これはかなり一般的な問題だと思います。この点に関して、画像のアップロードの処理方法について誰かがパターンやアドバイスを持っているのではないかと思います。

4

2 に答える 2

1

FileReader APIを使用すると、実際にディスクからバイナリBLOBを読み取り、フォームを送信する前に、そのイメージを純粋にクライアント側で使用できます。

http://www.onlywebpro.com/2012/01/24/create-thumbnail-preview-of-images-using-html5-api/を参照してください

于 2012-11-10T20:24:24.673 に答える
0

ほとんどのサービスには、アップロード時にサムネイルを自動的に保存するための専用の場所があります。私のサービスでも、元の画像を s3 に保存し、対応する仮想パスをそのサムネイルにマップして、サムネイル画像のユーザー メタデータに保存します。

したがって、UI の観点からは、最初はサムネイルのみを表示します。これにより、ダウンロードのコストが比較的低くなります。ユーザーが画像をクリックすると、元の画像の場所がこの画像のメタデータから取得されます。これにより、ユーザーが要求した場合にのみ元の画像を取得します。

また、元の画像が要求され、コンテナ内でレンダリングされる場合、ダウンロード時に画像のサイズ変更を行うことができます。

于 2012-07-10T07:41:41.797 に答える