web-dev-qa-db-ja.com

ブラウザから複数のファイルをアップロードする最良の方法

Webアプリケーションに取り組んでいます。ユーザーがHTTPプロトコルでファイルをアップロードできる場所が1つあります。従来のHTMLファイルアップロードコントロールとJavaアプレットによるファイルのアップロードを選択できます。

一度に1つのファイルしか選択できないため、従来のHTMLファイルのアップロードは素晴らしいものではありません。実際のアップロード中に進行状況を表示することは非常に困難です(最後に、タイマーを使用して、 AJAX呼び出しを介して)サーバー。利点:常に機能します。

Javaアプレットを使用すると、さらに多くのことができます。一度に複数のファイルを選択し(フォルダも含む)、ファイルを圧縮し、実際の進行状況バーを取得し、アプレットにファイルをドラッグアンドドロップします。等...
しかし、いくつかの欠点があります:

  • mac SafariとMac Firefoxで正しく動作させるのは悪夢です(Liveconnectに感謝)
  • uIは正確にはネイティブUIではなく、一部の人々はそれに気づきます
  • アプレットが反応しません(私のせいかもしれませんが、すべてが私には問題ありません)
  • Java UrlConnectionクラスでHTTPSを使用している場合はバグがあるため、Apacheの一般的なHTTPクライアントを使用して実際のHTTPアップロードを実行します。パッケージが非常に大きく、ダウンロードが遅くなります.jarファイルの
  • apacheの一般的なHTTPクライアントでプロキシを通過できないことがある
  • Javaランタイムはかなり大きい

私はこのJava=アプレットをしばらくの間維持していますが、今ではすべての欠点にうんざりしていて、これらのファイルをアップロードするための完全に新しいコンポーネントを作成/購入することを検討しています。

質問

次の要件がある場合:

  • ブラウザからHTTPまたはHTTPSを介して複数のファイルを簡単にアップロードする
  • ファイルを圧縮してアップロード時間を短縮する
  • アップロードは、ネイティブUIを備えた任意のプラットフォームで機能する必要があります
  • 少なくとも2GBまでの巨大なファイルをアップロードできる必要があります
  • あなたは技術にカルテブランチを持っています

どのテクノロジー/コンポーネントを使用しますか?


編集:

  • コンポーネント上のファイルのドラッグアンドドロップは非常に便利です。
  • Flash Playerのバグに関連する多くの問題があるようです( swfupload既知の問題 )。適切なMacのサポートと、認証付きのプロキシを介したアップロードは、私がなくてはならないオプションです。これはおそらくすべてのFlashベースのオプションを除外するでしょう:-(。
  • 従来のHTMLコントロールでは一度に複数のファイルを選択できないため、HTML/JavaScriptのみのオプションはすべて除外します。フォルダ内の複数のファイルを選択する場合、「参照」ボタンをn回クリックするのは面倒です。
36

OKこれは私の考えです

私はswfuploadを使用していくつかのテストを行い、Javaに関する以前の経験があります。私の結論は、次のとおりですどのテクノロジーを使用しても、ブラウザーでアップロードを実行するための完璧なソリューションはありません:常に終了します巨大なファイルをアップロードするとき、プロキシを通過するとき、sslを使用するときのバグなど...

しかし:

  • フラッシュアップローダー(la swfupload)は本当に軽量で、ユーザーからの承認を必要とせず、本当にクールなネイティブインターフェイスを備えていると私は考えています
  • a Javaアップローダーは認証が必要ですが、ユーザーが選択したファイル(必要に応じて圧縮)を使用して好きなことを実行できます。ドラッグアンドドロップはうまく機能します。いくつかの壮大なバグのデバッグに備えてください 'でも。
  • それが本当の答えだと思う限り、Silverlightで遊ぶことに変更はありませんでしたが、テクノロジーはまだかなり若いので...少しいじる機会があったら、この投稿を編集しますSilverlight

すべての回答をありがとう!

最近、Silverlightに何かを実装しました。

基本的にHttpWebRequestを使用して、データのチャンクをGenericHandlerに送信します。

最初の投稿では、4KBのデータが送信されます。 2番目のチャンクでは、別の4Kチャンクを送信します。

2番目のチャンクが受信されると、最初のチャンクと2番目のチャンクの間の往復を計算します。これで、3番目のチャンクが送信されると速度が上がることがわかります。

この方法を使用すると、任意のサイズのファイルをアップロードでき、再開できます。

この情報に沿って送信する各投稿:

[パラメータ] [ファイルデータ]

ここで、パラメーターには以下が含まれます。[チャンク#] [ファイル名] [セッションID]

各チャンクを受信した後、より大きなチャンクを送信できるように、応答にかかった速さをSilverlightに返します。

コードなしで説明を書くのは難しいですが、それが基本的に私がやった方法です。

ある時点で、これをどのように行ったかについて簡単にまとめます。

5
Gautam

サイズが2GBのファイルでこれを使用したことはありませんが、 YUI File Uploader は以前のプロジェクトではかなりうまく機能しました。この jQuery Plugin にも興味があるかもしれません。

とは言っても、Javaアプレットが最適です。移植性やUIの問題が予想よりも少なくなり、ドラッグ/ドロップがうまく機能するようになります。記録のために、Box.netは、マルチファイルのクイックアップロードにJavaアプレットを使用します。

5
slf

ニースの複数ファイルのアップロード機能を備えた無料のフラッシュコンポーネントがいくつかあります。彼らは、サーバー側のPHP(または何でも)レシーバーでActionScripts FileReferenceクラスを使用します。FP10の起動で最近壊れたものもありますが、確かに swfupload 動作します:)

お役に立てれば!

3
adam

これらの2つのJupload http://jupload.sourceforge.net/ とjumploader http://jumploader.com/ はどうですか?

どちらもJavaアプレットですが、どちらも本当に使いやすく、実装も簡単です。

2
Alos

google gears はどうですか?

1
Thierry

Daveがすでに指摘したように、HTTPフォームを使用して複数のファイルをアップロードすることもできますが、HTTPとJavascriptが提供するもの以外のものを使用することに専念している場合は、Flashを強く検討します。 MultiPowUpload などの既存のソリューションもいくつかあり、探している機能の多くを提供します。また、Flashクライアントを使用すると、JavaScriptからAJAXを呼び出すよりも簡単に進捗情報を取得できます。柔軟性が少し高いためです。

0
Jay

Apache Commons FileUploadパッケージを確認できます。複数のファイルをアップロードしたり、アップロードの進行状況を監視したりできます。あなたはここでより多くの情報を見つけることができます:

http://commons.Apache.org/fileupload/
http://commons.Apache.org/fileupload/using.html

幸運を

0

Javaでのファイルアップロードの最も簡単な方法はGOJFileUpload.jarライブラリです

Gojfileuploadライブラリのチュートリアルは次のとおりです。

GOJFileUpload

彼らは二つの方法を与える

  • UploadFile(String filepath、ArrayList imagenames、HttpRequest request)
  • UploadFile(String filepath、ArrayList dataname、ArrayList imagenames、HttpRequest request)

彼らはあなたのHashMapをあなたの指定された宛先フォルダにアップロードした後にアップロードしたすべてのファイル名を返します。

0
Tell Me How

複数ファイルのアップロードを可能にするHTTP/HTTPSアップロードコントロールがあります。 ここ は、Telerikからのものです。最新バージョンは、機能要件のすべてではないにしても、ほとんどを備えているようです。

0
Dave Swersky