4

私はwebsitweに取り組んでおり、1,000枚近くの写真を送ってくれるクライアントが必要です。私たちの間には地理的な距離が少しあるので、CDまたはSDカードを郵送することは不可能ではありませんが、それは好ましくありません。クライアントに写真を送信してもらうためにPHPアップローダーを作成できますか、それとももっと良い方法がありますか?ファイル共有サイトを購読したくありません。

私がそのようなアップローダーを書いていると仮定すると、アップロードの中断によって破損したファイルから保護するプログレスバーやその他の機能をコーディングする方法はありますか?

役立つリソースへのリンクはプラスです。

ありがとう

編集:

これは一度限りのことであり、これらは私たちが議論している高品質の画像です。数GBになります。

FTPスペースとは、FTPサーバーのユーザー名とpwdを意味しますか?それは可能ですが、(なぜ)FTPクライアントはWebベースのアップローダーよりも優れているのでしょうか?クライアントがFTPプログラムのダウンロード方法を知っているか、ダウンロードしたいかどうかはわかりません。クライアントはMac上にあり、私が見たMac用のいくつかのFTPプログラムを信用していません。

「すべてを1つのzipで」ルートを取ると仮定すると、PHPは機能しますか?

再度、感謝します。

編集:

さて、これまでのところ、.zipファイルを使用しない限りPHPを使用しないと確信しています。また、私はおそらく今のところプログレスバーをnixします。クライアントを待って、数日以内に全員に返送されます。

編集:

ある種の機能でクライアントに会いました。クライアントはフラッシュドライブに写真を持っていました。問題が解決しました。すべての入力に対して+1。

4

5 に答える 5

6

FTPスペース、またはWebDAV共有を設定すると思います。それができない場合は、ブラウザが単一のファイルしか選択しないため、何百もの一意のアップロードを処理しようとするのではなく、単一の(または少数の)zipファイルで画像をアップロードします。ファイルアップロードダイアログで一度に(つまり、アップロードするディレクトリ全体を選択することはできません)。

この場合、PHPを使用しないのはなぜですか。

PHPでは、単純なファイルアップロードハンドラーを作成するのは簡単ですが、非常に大きなアップロードを処理する場合は、ファイルサイズのアップロード制限、スクリプト実行時間制限、およびメモリ制限に注意する必要があるため、かなり注意が必要です。初めてセットアップするのは少しイライラするかもしれません。

処理したいマルチGBファイルの場合、HTTPアップロードは希望どおりではありません(理由を尋ねる必要がある場合は、希望どおりに機能させることは、おそらく非常に苛立たしいプロセスになるでしょう。 )。

Mac OSにはいくつかの優れたFTPクライアントがあり、FTPクライアントよりも優れたファイル転送方法としてWebブラウザを信頼する理由はありません。

プログレスバーのサポートについて:

現在のプログレスバーのサポートは、PHPでは非常に制限されています(現在、少し毛むくじゃらのサードパーティモジュールを介してのみ)。ただし、モジュールを標準ディストリビューションに含める計画があると思います。uploadprogress.soをグーグルで検索すると、関連する結果が得られるはずです。

littlegreenへの返信:

私はこの拡張機能http://pecl.php.net/package/uploadprogressを使用し(これは、すでにインストールした少なくとも1つの拡張機能と競合しましたが、現在その問題は修正されていると思います)、カスタムjavascriptハンドラー(http ://iaincollins.com/javascript/FileUploader.js)それぞれの最良のものを組み込むために、Web上のいくつかの複数の例に基づいています。たとえば、非表示のiframeを使用してアップロードの進行状況を透過的に返す、DHTMLファイルのアップロードダイアログボックスを作成し、醜いブラウザベースのファイルアップロードコントロールを透明にして自分のコントロールの上にオーバーレイすることで置き換えます(したがって、クリック可能でした。アップロード用に選択されたファイルの名前を取得することはできますが、JavaScriptからファイルアップロードダイアログを呼び出すことはできません)。CSSのスタイルを正しく設定することは、このために特に重要でした。これは、ブラウザー固有のものです。

私が書いたJSは悲しいことに状況に固有のものですが、いくつかの役立つ要素が含まれている可能性があります。申し訳ありませんが、プライベートインターフェイス用に作成されたため、リンクできるパブリックはありません。

今uploadprogress用のjQueryプラグインがあるようです-それはすべてを行うわけではありませんが、それは良いスタートになるでしょう:http: //nixbox.com/demos/jquery-uploadprogress.php ...私はより良い例が出ていることを思い出しますそこには、複数のファイルのアップロードを処理するものも含まれます(キューに入れて順番に実行することで、一度に1つのファイルを選択する必要がありました)が、残念ながらそれらを見つけることができないようです。

結論:

時間がない限り、面倒なことは避けて、FTPスペースやプライベート/ピアツーピアのファイル転送アプリケーションなどを実行します。

ファイル転送プロトコル(名前が示すように)は、特に大きなファイル転送用に設計されており、構成がほとんど必要なく(リソースの制限にぶつかることはありません)、クライアントがFTP再開をサポートすることを合理的に期待できるため、より優れたオプションです。サーバーが停止したと仮定します(つまり、ダウンロードが停止した場合、PHPファイルベースのHTTPアップロードの場合のように最初からやり直すのではなく、中断したところから簡単に再開できるはずです)。

HTTPにはファイルのアップロードを処理する機能がありますが、それほど堅牢ではありません。マルチGBファイルのアップロードを可能にするには、さまざまなリソース制限(WebサーバーおよびPHPで-上記のとおり)を明示的に構成する必要があります。WebDAV(HTTPサーバーリモートファイルシステムを使用)でも透過的ですが、主にクライアントの実装にバグがあるため、FTPほど堅牢ではない傾向があります。特に、WindowsとMac OSの両方で非常に大きなファイルを転送すると、問題が発生する可能性があります。通常、小さな(たとえば、500 MB未満の)ファイル転送には問題ありません。

ちなみに、HTML5仕様は、ファイルアップロードの処理方法を改善します。一度に複数のファイルをアップロードする可能性があり、仕様の一部としてファイルアップロードの進行状況がありますが、現時点では実際にはオプションではありません。

于 2010-01-15T00:53:21.307 に答える
4

FTPをお勧めします。その理由は、一括アップロード、開始/一時停止/停止、およびフォルダー階層の保持(必要な場合)を実行できるためです。Mac用のFTPソリューションは素晴らしいです。TransmissionとCyber​​duckを使用しています。Filezillaも良いです。

もう1つのFTPオプションは、クライアントが自分のMacを使用してローカルFTPサーバーをセットアップし、そこから写真をダウンロードできるようにすることです。これには少し設定が必要ですが、間違いなく可能です。

いずれにせよ、この量のファイルに対してブラウザベースのファイルアップロードはお勧めしません。それらを1つずつ(またはバッチで)アップロードすると、クライアントにとって非常に面倒な作業になる可能性があります。PHPの投稿パラメータとアップロードファイルサイズの制限により、すべての画像を1つのアーカイブに圧縮することが困難になります。また、ブラウザは通常、一時停止と再開を処理できないため、大きなファイルを転送するとタイムアウトの問題が発生する可能性があります。

ブラウザベースのアップロードの例外は、 SWFUploadなどのFlashベースのファイルアップローダーを使用することです。これを使用すると、クライアントに一度にすべてのファイルを選択させることができます。その後、ファイルはキューに入れられ、サーバー側スクリプト(PHPでも可能)に1つずつアップロードされます。実際、私はこれを、クライアントにファイルを送信させるのとまったく同じ目的で使用しました。

そうは言っても、この場合でもFTPをお勧めします。

于 2010-01-15T02:31:29.390 に答える
2

ファイルの数を無視して、どのくらいのデータについて話しているのでしょうか。

ファイルの数が気になる場合は、クライアントに圧縮してもらいます。サーバーでzipを解凍し、必要な場所に画像を配置できます。

また、これが定期的に行われるプロセスなのか、それとも不規則なメンテナンスや1回限りの起動タスクなのかを自問してみてください。その場合は、ftpまたはその他の方法でファイルを交換するだけで、自分自身とクライアントの時間とお金を節約できます。

于 2010-01-15T00:41:03.943 に答える
2

私はクライアントのために同様の問題を解決しなければなりませんでした。彼らは定期的に彼らのクライアントに彼らにたくさんのファイルをアップロードさせます、通常はFTPを通して合計300-400mb。ただし、1つのクライアントにファイアウォールがあり、FTPを使用できませんでした。そのため、HTTPアップローダーをコーディングする必要がありました。

インターネットでPHPソリューションを検索したところ、基本的にIan Collinsがすでに言ったのと同じことがわかりました。1)PHPは可能ですが、毛深い2)PHPのプログレスバーのサポートが悪いです。ただし、アップロード/サイズの制限については、次のコードを含む.htaccessファイルをWebディレクトリに含める限り問題ありません。これにより、アップロードの制限は3 GBになり、スクリプトの実行は無制限になります。ウェブホストがhtaccessファイルでのPHPconf値の設定をサポートしている限り:

php_value upload_max_filesize 3000M
php_value post_max_size 3000M
php_value max_execution_time 0
php_value max_input_time 0

アップローダースクリプトのコーディングは比較的簡単です。良いチュートリアルはここにあります

プログレスバーの使用はもっと注意が必要です。PHPのみのプログレスバーは、拡張機能をインストールしないと使用できません。一般的に受け入れられているオプションは、ハイブリッドPerl / PHPソリューションを使用することですが、サーバーでCGIスクリプトを実行できる必要があります。できないので、プログレスバーを省略しました。ただし、ブラウザがロックされていると考えて、動かない画面をかなり長い間見つめているため、これはクライアントにとって非常に不親切です。ブラウザを閉じたり、インターネット接続が失われたりした場合は、最初からやり直す必要があります。

一度に複数のファイルをアップロードすることも注意が必要です。高度なファイル選択コントロールとAJAXを使用して複数の同時アップロードセッションを開くことで、長い道のりを歩むことができますが、同じ問題が残ります。奇妙なファイル名、ディスクがいっぱい、または接続が失われたために失敗すると、クライアントは最初からやり直す必要がありますが、サーバー上にすでにファイルが混乱している可能性があります。ユーザーフレンドリーな履歴書ソリューションのコーディングは簡単な作業ではありません。クライアントにファイルをZIPして、まとめてアップロードさせることをお勧めします。

これは1回限りのことなので、独自のソリューションを作成することを気にせず、すでに利用可能なツールを使用することをお勧めします。クライアントにFTP、たとえばFileZillaのMACバージョンを使用させてみませんか?またはDropBox?または、彼にファイルをGoogle Docsにアップロードさせてみてはどうでしょうか。最近では、最大100MBのファイルをアップロードして共有できるようになっています。

于 2010-01-15T10:53:43.057 に答える
0

SWFUpload(http://code.google.com/p/swfupload/)を検討してみてください。これは、アップロードを非常に簡単にするためのFlashとJavascriptのライブラリです。箱から出してすぐにPHPと.Netをサポートしているので、ニーズにぴったり合うでしょう。

1回のアップロードセッションで最大1,000枚の画像に使用しました。

于 2011-01-19T17:00:49.330 に答える