2009-02-24 33 views
36

私はWebアプリケーションを開発中です。ユーザーがHTTPプロトコルでファイルをアップロードできる場所が1つあります。古典的なHTMLファイルアップロードコントロールとファイルをアップロードするためのJavaアプレットの選択肢があります。ブラウザから複数のファイルをアップロードする最良の方法

一度に1つのファイルしか選択できないため、実際のアップロード中に進捗状況を表示することは非常に難しいので、古典的なHTMLファイルのアップロードは素晴らしいことではありません(最終的には、 AJAX呼び出しによってサーバーからフェッチされたデータ)。利点:それは常に働いています。

Javaアプレットでは、複数のファイルを一度に(フォルダでも)選択し、ファイルを圧縮し、実際の進行状況バーを取得し、アプレット上でファイルをドラッグアンドドロップします。
しかし、いくつかの欠点があります:

  • それは(おかげでLiveConnectの)それは、MacのSafariとMacのFirefoxで正しく動作するために取得するには悪夢だ
  • は、UIは正確にネイティブUIではなく、一部の人がいることに気づきます
  • アプレットはそれほど反応しません(私の誤りかもしれませんが、すべてが私には大丈夫です)
  • Java UrlConnectionクラスにHTTPSのバグがあるため、Apacheの一般的なHTTPクライアントを使用して実際のHTTPアップロードを行います。これはかなり大きなパッケージだと.jarファイルのダウンロードが遅くなり
  • Apacheの一般的なHTTPクライアントがプロキシ経由
  • Javaランタイムを行くのトラブルは、私はこれを維持してきた

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

質問

次の要件があった場合:HTTPまたはHTTPS

  • を通じて、ブラウザから簡単に

    • アップロード複数ファイルのアップロード時間を短縮するためにファイルを圧縮し
    • アップロードは任意のプラットフォームで動作するはずです。ネイティブUI
    • は、最大2GBの巨大なファイルをアップロードできる必要があります。トン以上
    • あなたは

    何技術/ compontentあなたが使用する技術に白紙委任を持っていますか?


    編集:

    • コンポーネント上のファイルのドラッグアンドドロップは素晴らしいプラスになります。
    • Flash Player(swfupload known issues)のバグに関する多くの問題があるようです。適切なMacのサポートと、認証付きのプロキシ経由でのアップロードは、私が無理なく行うことができるオプションです。これは、おそらくすべてのFlashベースのオプションを排除するでしょう:-(。
    • 従来のHTMLコントロールでは、一度に複数のファイルを選択することはできないため、すべてのHTML/Javascript専用オプションを除外します。フォルダ内の複数のファイルを選択する場合は、「参照」ボタンをn回クリックするのが苦労します。
  • +2

    再開可能なアップロードはどうですか?それは私にとって本当に重要なようです。数時間後に失敗したアップロードを再開したい人は誰もいません。 –

    +0

    真の場合は、まだFlashを使用できるとは思っていません。Java(とSilverlightのみ) –

    +0

    こんにちは、他のFlashベースのアップローダはhttp://digitarald.de/project/fancyupload/ –

    答えて

    4

    OKこれは、私はSWFUploadの持ついくつかのテストをしたこの

    上の私の感想であり、私は、Javaと私の以前の経験を持っており、私の結論は行うには完璧なソリューションが存在しないどんな技術が使用されていることですブラウザのアップロード:SSLで、巨大なファイルをアップロードするプロキシを通過するときには、常にバグになってしまいます、等...

    しかし:

    • フラッシュアップローダ(a la swfupload)は本当に軽量で、ユーザからの承認を必要とせず、本当にクールなネイティブインターフェイスを持っていると私は思っています。
    • Javaアップローダは許可を必要としますが、ユーザーが選択したファイル(必要に応じて圧縮)、ドラッグ&ドロップがうまく機能します。しかし、いくつかの叙事詩のバグをデバッグする準備ができています。
    • 技術はまだ若いので、本当に答えがほしいと思う限り、私はSilverlightで遊ぶように変更していませんでした...私はこの記事を編集します。 Silverlightでちょっと手を加える

    ありがとうございました!

    +1

    数年前にこの回答を見つけた人のためのメモ。私たちは何年もSWFUploadを使ってきましたが、一般的にはとてもうまく動作します。注意すべき点は、Flash Player 9以降は認証ヘッダーを送信しないため、認証が必要な統合Windows認証またはプロキシサーバーを使用する場合は機能しません。このため、HTML5ベースのソリューションに移行しました。 –

    0

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

    +0

    にあります。 AJAXのアップローダ、これは.NETに結びついて無用です – Javier

    +0

    また、一度に1つのファイルを選択することはできません。たぶんあなたはtelerik silverlightアップロードコントロールについて話したかったかもしれません。 –

    3

    素敵な複数のファイルアップロード機能を備えた無料のフラッシュコンポーネントが多数あります。彼らはActionScriptのFileReferenceクラスをサーバー側のPHP(または何でも)受信機で使用します。 FP10の発売に伴って最近壊れているものもありますが、私は確かにswfuploadが動作することを知っています:)

    0

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

    0

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

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

    幸運

    +1

    Apache Commons Fileuploadは、ファイルアップロードhttpポストを解析するために使用されるJavaサーバーサイドライブラリです。私はすでにその部分が働いています。私は本当にクライアントの部分に焦点を当てています。 –

    5

    私はSilverlightで非常に最近何かを実装しました。

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

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

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

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

    私はこの情報に沿って送っ各ポストは:

    ここでは、[パラメータ] [FILEDATA]

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

    各チャンクが受信された後、どのくらいの速さで、より大きな チャンクを送信できるようになったかをSilverlightに返信します。

    コードなしで私の説明を入れるのは難しいですが、基本的にどのようにしたのですか。

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

    +0

    私はこれもやってみたい。私は、管理されたコードを使用してクライアント側のファイルを最終的に操作できることが大好きです!ロングライブシルバーライト! – TJB

    +0

    ブラウザのクッキーマネージャー、プロキシー、プラットフォームのサポートに関してsiverlightプレーヤーの問題にぶつかりましたか? –

    +0

    Silverlightはクライアント側で実行され、アップロードハンドラはサーバー側で実行されます。それらは両方ともセッションから切り離されているので、起動時にセッションIDをSilverlightに渡します。アップロード中、セッションはSilverlightからハンドラに渡され、セッション内にすべて保持されます。 – Gautam

    5

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

    しかし、私はまだJavaアプレットが道のりだと思います。私はあなたが期待しているよりも移植性とUIの問題が少なくなり、Drag/Dropがうまくいくと思います。記録のために、Box.netは複数ファイルのクイックアップロードにJavaアプレットを使用しています。

    +0

    Box.netは、アップロードの最初のオプションとしてFlashコンポーネントを使用します。そのコンポーネントは、 "drag'n'drop"を使用したいユーザのためのJavaアプレットへのリンクを提供します。 –

    1

    google gears

    +0

    良いアイデアだが、ちょっと怖いのは、Mac OS X Snow Leopardでサポートされていないということだ:Snow Leopardは2ヶ月間出ている!!私は好奇心からFirefoxを一気に試してみる);ありがとう! –

    2

    は約これら2 Jupload http://jupload.sourceforge.net/ と jumploader http://jumploader.com/

    はどちらも、Javaアプレットは何をしているが、彼らは両方も使用して実装するのは本当に簡単です。 Javaでファイルアップロードの

    +0

    うん、私はすでにJUploadについて聞いたことがありますが、チャンス/実際にそれを少しストレステストする時間はありませんでした。私は、https上のアップロードが一般的な問題であることを知っています(問題はJDK実装そのものにあります.JUploadがデフォルトの実装を使用している場合は、おそらく問題があります)。 –

    +0

    Jumploaderについて:UIは本当に素晴らしいようですが、HTTPsをサポートするようです。私の意見で一見価値がある:) –

    0

    最も簡単な方法は、ここで

    GOJFileUpload.jarライブラリですgojfileuploadライブラリのチュートリアルです:

    GOJFileUpload

    彼らは2つの方法

    • UploadFile(文字列のファイルパスを与えます、ArrayList imagenames、HttpRequest request)
    • UploadFile(文字列ファイルパス、ArrayListのdataname、ArrayListの imagenames、HttpRequestのリクエスト)

    は、彼らはあなたが自分の与えられた先のフォルダにアップロードした後にアップロードHashMapのすべてのファイル名を返します。

    関連する問題