2016-07-23 16 views
0

node.jsサーバーでオーディオファイルを提供しようとしています。問題は、私は自分のコンピュータで任意のオーディオファイルを取得できるようにしたいが、サーバ上のディレクトリで動作するようにhtmlでオーディオ要素を作る方法を知らない。私が見つけたthisの質問がありますが、私が常に変更できるようにしたいファイルは本当に役に立たなかったので、Node.jsのサーバーディレクトリの上のファイルを取得する方法

プロジェクトは、基本的にブラウザのメディアプレーヤーです。それはLAN上にあるので、コンピュータ内のすべてのサービスは本当に問題ではありません。私はすでに画像、javascriptとcssのための明示的な静的関数を使用しています。アプリケーションは、パス、名前、その他の情報をnedbで保持しています。

+1

アプリケーションがどのように答えることができるかに関する情報が少なすぎます。既存のコードを共有できますか? –

+0

ええ、どのコードを共有する必要がありますか?私はすべてを投稿することはできませんが、特定のものがあれば投稿できます。私はそれを私ができるほど良く説明しようとした。 –

答えて

1

まず、node.jsがデフォルトでファイルを提供していないことを理解する必要があります。したがって、/foo要求が特定のファイルまたはコードからコンテンツを生成するように、個々の要求を手動でコーディングする必要があります。または、がサーバー上の対応するディレクトリ(たとえば、/myservercontent/foo)を読み取るように指示するマッピングのセットを作成する必要があります。

さらに、ファイルのディレクトリ階層全体(たとえばexpress.static())に対してこのマッピングを作成するのに役立つさまざまなツールがあります。しかし、このようなマッピングには明示的なルートがあり、すべての要求はある種のルートに関連しています。このルートをサーバー上のどこに配置するかを定義することができます。それはサーバーのルートディレクトリでもあります(これは決してさまざまな理由で推奨されません)。通常、このルートは、その親ディレクトリの下にパブリックWebコンテンツのみを含むハードディスク上の親ディレクトリに設定されます。これは、ランダムなWebユーザーがシステム上の公開する予定のないファイル(HTTPS証明書、データベース、サーバーコード、パスワードファイルなど)にアクセスできる状況を決して作成しないようにするためです。 。

node.jsは、あなたが望むものを何でもできるようにします。ハードドライブ上のランダムなファイルに任意の場所でアクセスする場合は、node.jsを簡単にコーディングしてください。それを達成するにはいくつかの方法があります。 1つの簡単な方法は、クエリパラメータを受け入れるルートを構築することです。クエリパラメータが目的のファイルへのパスを指定し、そのルートハンドルにそのファイルを読み込んで返すようにします。これは、トラックを通過させるのに十分大きな穴があいているので、決してこれをお勧めしません。

あなたが本当にすべきことは、サーバー経由で利用できるようにするすべてのファイルを集めて1つの安全なディレクトリ階層に入れ、その特定のディレクトリ階層内のファイルにアクセスできるようにすることですあなたのハードドライブに。

  1. は、あなたが思うに安全であるすべてのオーディオファイルを識別するために、ローカルハードドライブをスキャン:あなたがやっていることについてもう少し説明してきたことを今


    は、ここ1つのアイデアですシェア。間違いが大きなセキュリティ上の問題を引き起こす可能性があるため、あなたが共有することを決定したものに非常に注意してください。あなたは完全な文脈を理解していないので、あなたがここでやっていることのセキュリティリスクを評価しなければならないでしょう。

  2. このオーディオファイルのリストを収集するときに、サーバーが使用している何らかの種類のデータストアにリストを保存しておくと、後でいつでもすぐにリストにアクセスできます。私はあなたが将来的に参照しやすくするかもしれない各オーディオファイルの一意のIDを作成することをお勧めします。

  3. これで、リモートユーザーにこれらのオーディオファイルのリストを提供することができ、それらのオーディオファイルを選択できます。その後、特定のオーディオファイルを再生する要求の一部として、選択したオーディオファイルをサーバーに送信することができます。私はあなたのユーザインタフェースが重要であるか関連している場合、元のパス名を表示することを選ぶかもしれませんが、ファイルはID(セキュリティ上の理由から)だけで要求されるべきであると提案します。

  4. サーバーが特定のIDを持つオーディオファイルを再生する要求を受信すると、サーバーはそのデータストアを参照して、特定のIDを持つオーディオファイルを調べることができます。これは重要なステップです。これはクライアントが(パスではなく)IDでファイルを要求するようにするためです。これにより、クライアントは以前にスキャンしたオーディオファイルのみを要求できるため、公開することが安全であることがわかります。リモートクライアントが、あなたが共有しようとしていない他のファイルを要求する脆弱性はありません。

  5. サーバがデータストアを検索し、その特定のIDを持つオーディオファイルを見つけたら、データストアからローカルパスを取得し、オーディオファイルを読み込み、リモートに送信/ストリーム送信できますクライアント。一例として、


、ステップ3と4で、クライアントは次のようになりますURL送ることがあります。

http://someserver/play/5934902

オーディオファイルを再生するための要求だろうidは5934902です。あなたのサーバには、IDを使用してステップ4と5を実行する/play/:idのルートハンドラがあります。

+0

質問を編集してより多くの情報を提供しました。私はあなたがセキュリティに関して何を言っているのかを完全に理解しています。しかし、このアプリは、ハードドライブ上でスキャンを実行し、すべてのオーディオファイル情報を取得し、メディアプレーヤーのようにそれを提供します。そしてLAN上でのみ実行されるので、セキュリティは本当に私にとって問題のようには見えません。私が間違っていれば私を修正してください。 –

+0

@UralBayhan - 私はオーディオファイルの共有に関連する私の答えにさらに追加しました。 – jfriend00

+0

これは実際に私がやっていたものですが、私は最後の部分を得ていません。 を試してみると、コンソールに「ローカルリソースを読み込めません」と表示されます。あなたはオーディオ要素以外のものが必要だと言いますか?私はsocket.ioを使用し、フロントエンドjsにhtmlを変更するためのパス情報を送ることを考えました。 –

関連する問題