2016-04-26 19 views
1

bodyで指定したPOSTリクエストを使用して、指定されたファイルをサーバ側で動的に作成し、レスポンスとしてクライアントにストリーミングします。クライアント側の問題は、PCのハードドライブではなく、応答オブジェクト(ブラウザのキャッシュメモリ、一時ファイル)にファイルがダウンロードされていることです。強制的に大きなファイルをダウンロードするブラウザ

ブラウザが直接/ streamsフォルダにアクセスしたり、ダウンロードしたりするためにバイトストリームを直接渡すことができますか?

ファイルサイズが非常に大きく、ガジェットのハードドライブに十分なスペースがなく、そこに作成してGET要求のリンクを提供するための十分なスペースがありません。だから私はそれを即座に作成し、POST応答としてクライアントにストリームする必要があります。

今、私はコードをAngularで書いていますが、言語は本当に重要ではありません。ブラウザがどのように状況を処理するのかを理解したいと思います。
HTTPリクエストを実行すると、ブラウザがソケットに渡す前に何かしていると思います。そして、私はブラウザが要求を実行したコードに渡す前に受信したリクエストで何かを行うことを確信しています。

私は、レスポンスヘッダーを設定するだけで、ブラウザが/ Downloadsにファイルをダウンロードできることを意味しますか?パケットがブラウザによって「盗まれた」場合、待機中のHTTPリクエストにはどうなりますか?また、レスポンスヘッダがレスポンスオブジェクトに到着したとき、レスポンスのボディが/ Downloadsにダウンロードしたいファイルバイトストリームであることをブラウザに何とか通知できますか?

また、サーバーコードも変更する可能性があります。

EDITより詳細な説明:
私のサーバーは、クライアントへの5GBのファイルを送信しています。ブラウザの一時的なメモリにそのファイルを受け取るのではなく、ファイルをハードドライブに直接保存したいと思います。
しかし、当然のことながら、ブラウザはユーザーのコンピュータへの直接アクセスを禁止しているので、そこに書き込むことはできません。では、ブラウザのバイトストリームを処理してファイルに保存するにはどうすればよいですか?

+0

できません。ダウンロード場所はクライアントによって決定されます。 Windowsでは「このPC /ダウンロード」は通常はデフォルトですが、クライアントは何かを決定することができます。 – PHPglue

+0

ユーザファイルシステム上の特定のフォルダにファイルをダウンロードしようとする目的は何ですか? – guest271314

+0

問題は一般的にPC上のファイルをダウンロードし、特定のパスにダウンロードしないことです。今はファイルをブラウザのキャッシュメモリにダウンロードするだけで、PCのハードドライブにはダウンロードされません。これが少し明確になることを願っています。 – user3622167

答えて

0

私はこの問題を解決しました。したがって、ブラウザのJavaScriptコードからサーバーにファイルリクエストを送信すると、ブラウザは受信したレスポンスをレスポンスオブジェクトに直接渡しますが、外部(ブラウザ対応)ツールを使用せずにハードドライブに保存することはできません。

あなたがスクリプトから$ http.post()または.get()を実行すると、応答は$ http.post()に渡されます。次に(function(response){ ...})、それは全体の応答が受け取られた後にだけ渡されます。つまり、サイズが5GBのファイルが必要な場合、応答オブジェクト内で受信するには大きすぎるために失敗します。

代わりに、別の方法でダウンロードを開始する必要があります。私は私のコードでやったことは、私は隠された

<form method="POST" action="/set.uri.here/" id="download">...</form> 

を構築し、ユーザーがファイルをダウンロードするためのボタンをクリックしたときに、私は、フォームの体を構築し、それを提出する機能を実行することです。どの

var form = document.getElementById("download"); // magic here... create the body for the form and so on form.submit();

ようにあなたは、その応答が、ブラウザによって処理されるように、あなたのブラウザによって行われるための要求を渡すことができるこの方法を探します。これは、あなた自身またはブラウザによって要求を行うこととの重要な違いです。リクエストを自分で行うと、ブラウザはオブジェクトをダウンロードしませんが、あなたはそれを使って何かを行うことになります。

ブラウザにオブジェクトをダウンロードさせたい場合は、ブラウザもオブジェクトの要求を行うようにしてください!

関連する問題