まず、node.jsがデフォルトでファイルを提供していないことを理解する必要があります。したがって、/foo
要求が特定のファイルまたはコードからコンテンツを生成するように、個々の要求を手動でコーディングする必要があります。または、がサーバー上の対応するディレクトリ(たとえば、/myservercontent/foo
)を読み取るように指示するマッピングのセットを作成する必要があります。
さらに、ファイルのディレクトリ階層全体(たとえばexpress.static()
)に対してこのマッピングを作成するのに役立つさまざまなツールがあります。しかし、このようなマッピングには明示的なルートがあり、すべての要求はある種のルートに関連しています。このルートをサーバー上のどこに配置するかを定義することができます。それはサーバーのルートディレクトリでもあります(これは決してさまざまな理由で推奨されません)。通常、このルートは、その親ディレクトリの下にパブリックWebコンテンツのみを含むハードディスク上の親ディレクトリに設定されます。これは、ランダムなWebユーザーがシステム上の公開する予定のないファイル(HTTPS証明書、データベース、サーバーコード、パスワードファイルなど)にアクセスできる状況を決して作成しないようにするためです。 。
node.jsは、あなたが望むものを何でもできるようにします。ハードドライブ上のランダムなファイルに任意の場所でアクセスする場合は、node.jsを簡単にコーディングしてください。それを達成するにはいくつかの方法があります。 1つの簡単な方法は、クエリパラメータを受け入れるルートを構築することです。クエリパラメータが目的のファイルへのパスを指定し、そのルートハンドルにそのファイルを読み込んで返すようにします。これは、トラックを通過させるのに十分大きな穴があいているので、決してこれをお勧めしません。
あなたが本当にすべきことは、サーバー経由で利用できるようにするすべてのファイルを集めて1つの安全なディレクトリ階層に入れ、その特定のディレクトリ階層内のファイルにアクセスできるようにすることですあなたのハードドライブに。
は、あなたが思うに安全であるすべてのオーディオファイルを識別するために、ローカルハードドライブをスキャン:あなたがやっていることについてもう少し説明してきたことを今
は、ここ1つのアイデアですシェア。間違いが大きなセキュリティ上の問題を引き起こす可能性があるため、あなたが共有することを決定したものに非常に注意してください。あなたは完全な文脈を理解していないので、あなたがここでやっていることのセキュリティリスクを評価しなければならないでしょう。
このオーディオファイルのリストを収集するときに、サーバーが使用している何らかの種類のデータストアにリストを保存しておくと、後でいつでもすぐにリストにアクセスできます。私はあなたが将来的に参照しやすくするかもしれない各オーディオファイルの一意のIDを作成することをお勧めします。
これで、リモートユーザーにこれらのオーディオファイルのリストを提供することができ、それらのオーディオファイルを選択できます。その後、特定のオーディオファイルを再生する要求の一部として、選択したオーディオファイルをサーバーに送信することができます。私はあなたのユーザインタフェースが重要であるか関連している場合、元のパス名を表示することを選ぶかもしれませんが、ファイルはID(セキュリティ上の理由から)だけで要求されるべきであると提案します。
サーバーが特定のIDを持つオーディオファイルを再生する要求を受信すると、サーバーはそのデータストアを参照して、特定のIDを持つオーディオファイルを調べることができます。これは重要なステップです。これはクライアントが(パスではなく)IDでファイルを要求するようにするためです。これにより、クライアントは以前にスキャンしたオーディオファイルのみを要求できるため、公開することが安全であることがわかります。リモートクライアントが、あなたが共有しようとしていない他のファイルを要求する脆弱性はありません。
サーバがデータストアを検索し、その特定のIDを持つオーディオファイルを見つけたら、データストアからローカルパスを取得し、オーディオファイルを読み込み、リモートに送信/ストリーム送信できますクライアント。一例として、
、ステップ3と4で、クライアントは次のようになりますURL送ることがあります。
http://someserver/play/5934902
オーディオファイルを再生するための要求だろうidは5934902
です。あなたのサーバには、IDを使用してステップ4と5を実行する/play/:id
のルートハンドラがあります。
アプリケーションがどのように答えることができるかに関する情報が少なすぎます。既存のコードを共有できますか? –
ええ、どのコードを共有する必要がありますか?私はすべてを投稿することはできませんが、特定のものがあれば投稿できます。私はそれを私ができるほど良く説明しようとした。 –