2012-04-10 4 views
1

私はここで何かを尋ねるのは初めてですが、私は開発者ではありません。この要件は、私がいくつかの友達と作っているウェブサイトのためのものです。だから私はこれでお金を稼いでいるわけではありません。1同時ダウンロード+強制待ち時間+ Amazon S3

これは問題です:私はRapidShareのか、他のファイル共有サービスと同じ方法で非常に多く、ダウンロードに制限のいくつかの種類を実装する:

  1. ユーザーのみダウンロードすることができるはず1ファイルを同時にダウンロードする

  2. ユーザーは別のファイルをダウンロードできるようになるまで待つべきです(2時間と言う)。

ただし、私はファイル共有ウェブサイトを作成しようとしていません。私はすべてのファイルをAmazon S3にアップロードするつもりです。必要なのはダウンロードを制限できることだけです。私はファイルへのリンクを作成します。私はユーザーが登録されているかどうか気にしない、とにかくダウンロードできるはずです。

ウェブサイトはJoomla!で構築されており、Apache + MySQLを使用しています。ファイルはAmazonのサーバーに置かれます。

私の質問は次のとおりです。それほど複雑ではない方法でこれを実装する方法はありますか?あなたはこれを行うのに役立つスクリプトやWebサービスを知っていますか?

私は周りを見回しましたが、私が見つけたのは支払いゲートウェイだけです。ダウンロードを請求する予定はありません。

ご協力いただければ幸いです。

ありがとうございます!

UPDATE:私はこのスクリプトを使用してこの問題を解決:http://www.vibralogix.com/linklokurl/features.php

+0

うわー、それはユーザーを悩ませる素晴らしい方法のようです。 – ThiefMaster

+0

ええ、それは考えです。基本的には、リーチャーの仕事を少し難しくしています。 –

答えて

0

のみ2通りの方法が私の心に来る - あなたはユニークなハッシュを使用してファイルをコピーして、Apacheはそれを提供しましょうどちらか...そして、あなたが任意のコントロールを持っていませんユーザーが実際にダウンロードを終了する(または開始する)ときに終了します。大きなファイルに役立ちます。別の方法は、PHPに渡すことです。それでも、ユーザーがダウンロードを停止した場合にダウンロードセッションを終了する必要があります。

0

プラグインがない場合は、スクリプトを追加するか、&「some」コードをコピーすることで、簡単な方法で行うことはできません。

だから誰かを雇うか、あなた自身が仕事に近づくために必要なものを学ぶ必要があります。言い換えれば、プログラムする方法を学びます。あなたの質問には、実装する必要のあるステップが含まれています。誰が何をいつダウンロードしているかを記録し、ダウンロードのステータスを追跡します。

私は以前にダウンロードステータスを追跡しようとはしていませんが、ファイルを送信しているサーバーから何らかの形で直接ステータスを取得できるかどうかはわかりません。しかし、あなたはクライアントからそれを得ることができます:Download Status with PHP and JavaScript

ファイルがS3から来るので、あなたのシナリオでこれが正しく動作するかどうかさらに分かりません。

S3自体持っている、いわゆる機能「クエリ文字列の保護」:

クエリ文字列認証では、事前定義された有効期限 時間のために有効なURLを経由アマゾン S3オブジェクトを共有する能力を持っています。

これを実装する方法を理解するには、S3 APIをルックアップする必要があります。

ユーザーがダウンロードリンクをクリックしたときにサーバーにajaxリクエストを送信し、サーバーが応答として生成したamazon s3リンクを送信し、クライアントサイドのjavascriptで何とかそのファイルのダウンロードを開始させることができます。

+0

ええ、私はこれを実際に行う人を雇うことを考えましたが、その前に、これがどれほど簡単か難しいかをチェックしたいと思いました。 クエリ文字列認証に関して、私はそれについて読んだことがあり、Joomla用のコンポーネントがあり、ファイルを提供するために使用していると言います。しかし、このコンポーネントは残りのすべてを実行することに不足しています。 –

+0

ファイルの時間制限付きURLを簡単に生成し、約5分で期限切れにすることができます。次に、ユーザーが最近ダウンロードしていない場合に限り、時間限定のURLを作成します。これは、クッキーとIPアドレス、その他のトリックを意味します。通常、複数の人がIPを共有し、クッキーをクリアして、別のブラウザなどを試すことができます。プログラマー、などがこれを行う。 –

0

ユーザーのダウンロードをIPアドレスで監視し、ユーザーがダウンロードした時間とセッションID(もちろんハッシュ付き)と共にデータベースに格納し、各ダウンロード要求の前にこれを確認できます。現在の時間が同じセッション内で2時間未満の場合は、リクエストをブロックし、それ以外の場合はダウンロードをブロックします。

テーブルの構造:

Id  Ip_Addr  Session_Hash Timestamp 
1  10.123.13.67 sdhiehh_09# 1978478656 
2  78.86.56.11 mkdhfBH&^#  1282973867 
3  54.112.192.10 _)*knbh  1445465565 

これは非常に基本的な実装です。もっと頑強な方法が存在すると確信しています。お役に立てれば。

1

私が知る限り、S3からのダウンロードの現在の状態を確認する方法はありません。 S3が実際には平均65万オブジェクト/秒を提供していることを先週、Amazon announcedは知っていたのですが、S3は本当に十分な帯域幅を持っています。これはget_object_url機能を使用しています

<?php 
#Generate presigned S3 URL to download S3 object from 

# Include AWS SDK for PHP and create S3 
require_once("./aws-sdk/sdk.class.php"); 

$s3 = new AmazonS3(); 

# Let S3 know which file we want to be downloading 
$s3_bucket_name = "yours3bucketname"; 
$s3_object_path = "folder1/object1.zip"; 
$s3_url_lifetime = "10 minutes"; 
$filename = "download.zip"; 

#Check whether the user has already downloaded a file in last two hours 
$user_can_download = true; 

if($user_can_download) { 
    $s3_url = $s3->get_object_url($s3_bucket_name, $s3_object_path, $s3_url_lifetime, array('response' => array('content-type' => 'application/force-download', 'content-disposition' => 'attachment; filename={$filename}'))); 
    header("Location: {$s3_url}"); 
} 
else { 
    echo "Sorry, you need to wait a bit longer before you can download a file again..."; 
} 
?> 

、事前に生成します。あなたはPHPで@ Pushpeshのソリューションのようなものを実装したい場合は

、1つの解決策は、PHPのためのアマゾンSDKを使用して、このような何かをすることですあなたがS3でプライベートに設定したファイルを他の人にダウンロードさせ、これらのファイルを一般公開しないで済ませることができます。

ご覧のとおり、この生成されるリンクは10分間有効で、ユニークなリンクです。リンクが広がっていることを心配することなく、このリンクから人々を安全にダウンロードさせることができます。リンクは期限切れになります。人々は新しい、有効なリンクを得ることができる唯一の方法は、ダウンロードを開始しようとしているIP /ユーザーがすでに使用制限を超えた場合に新しいリンクを生成することを拒否するダウンロードスクリプトを実行することです。ただし、S3でこれらのファイルを非公開にすることは重要です。もしあなたがそれらを公に利用できるようにすれば、これはあまりうまくいかないでしょう。これらの事前に署名されたURLを生成するS3 APIについては、docsをご覧ください。

+0

あなたの答えをありがとう。実際、それは私が必要とするもののように聞こえる。私は、これを行うには非常に経験豊富な人材を雇って、あるいは単にRapidshareを使うことに多くの研究をしなければならないと思います。 一方、Amazonは膨大な帯域幅を持っていると私は知っていますが、私がこれで達成したいのは、何百ものファイルを連続してダウンロードするのを止めることです。私たちはファイルを請求するつもりはないので、これは非常に起こりそうです。 –

+0

PHP用AWS SDKをダウンロードしてWebサーバーに配置するのが快適であるとお考えですか?そして、あなたはそのサーバー上で動作しているMySQLデータベースを持っていますか?あなたがそれを行うことができれば、 '$ user_can_download = true'を実際のチェックに変えることはあまり働かないでしょう。今はそれをする時間がありません。しかし、明日の朝の朝食コーディング演習がいいかもしれません:)もちろんそれを絶対にしてJoomlaと統合するとかなり長い時間がかかりますし、あなたは本当にそれをする人を雇う必要があります。しかし、@ Pushpeshが説明したことの初歩的な示唆は、 – Daan

関連する問題