2011-03-04 4 views
14

JSまたはJavascriptを使用して強制的にダウンロードすることはできますか?つまり、Webページはブラウザの新しいタブでファイルを開くべきではなく、または???で開くjsまたはクエリを介して強制的にダウンロードする

+3

これは重複していますか? http://stackoverflow.com/questions/727144/browser-download-file-prompt-using-javascript –

+0

それは確かです。便利な重複の良い例です。なぜなら、質問のタイトルは同じことを話していても、かなり異なっているからです。 –

答えて

11

あなたはJavaScriptからその動作を強制することはできません、HTTPヘッダには、サーバー側で設定する必要がありますPDFのURL:

あなただけのアンカーに新しいプロパティのダウンロードを使用することができHTML5の登場により

+0

これで、[download](http://caniuse.com/#search=download)属性を使用できるようになりました。 – mpen

+0

@mpenはい、そのような答えがあります。質問の時点では、それは利用できませんでした –

+1

うん。あなたの答えを変更する必要はありませんが、一番上に表示され、それが受け入れられるので、私はちょうどさらにスクロールするにはあまりにも怠惰であることを人々に知らせることです:-) – mpen

4

いいえ、それは可能ではなく、神様に感謝していません。それ以外の場合は、あなたがそれを知らずにWebサイトにアクセスしたときに、どのような種類のファイルをあなたのコンピュータに保存できるか想像しておきます。

@Paul D. Whiteは、ファイルにインラインで(ブラウザー内で)関連付けられている既定のプログラムでファイルを開く場合は、サーバーがContent-Disposition HTTPヘッダーを送信できるようにコメントセクションで指摘しました。例:

Content-Disposition: inline; filename=foo.pdf 
+1

どうすればいいですか? – Shaun

+0

正しい:HTTPレスポンスヘッダー(特に 'content-disposition:attachment')を設定するだけで済みますので、サーバー側でのみ行うことができます。ページがクライアントで開いたら、HTTP応答は定義によって既に処理されています。 –

+0

質問者は、新しいタブを開くのではなく、ダイアログでそれを使用したいと明言しているので、あなたが返信している内容と正確に異なるわけではありません。 – gnur

2

これは、JQuery/JavaScriptでは不可能です。

Content-Type(HTTPヘッダー)を含むファイルを返すサーバーサイドスクリプトが必要です。これにより、ブラウザは要求されたファイルをダウンロードします。 Content-Typeの可能な値はapplication/force-downloadです。

Content-disposition=attachment; filename=some.file.name 

あなたが問題を解決できる方法は、あなたのAJAXメソッドがにユーザーをリダイレクトさせることです。

37

(上記のHTTPヘッダをPDFに設定する必要があります)タグ。

コードは、それはFirefoxとクロームの最新バージョンで動作します

<a download="name_of_downloaded_file" href="path/to/the/download/file"> Clicking on this link will force download the file</a> 

ようになります。私はIEでそれをチェックしなかったと言わなければならない? :P

がssturからコメントの後、ダウンロード属性を編集

+2

ダウンロードの値を指定することができますその属性はダウンロードのデフォルトのファイル名になります。 – sstur

+1

これは確かに進歩的な解決策ですが、2013年11月現在、IEやほとんどのモバイルデバイスではサポートがありません。 (出典:http://caniuse.com/#feat=download) – mcranston18

+1

OperaやIEではうまくいきませんが、私はこの解決法を自分で気に入っています。 –

13

ダイナミックリンクを作成し、ファイルとして力のダウンロードのためのダウンロードの属性でそれをクリックしてください:

var anchor = document.createElement('a'); 
anchor.href = this.props.download_url; 
anchor.target = '_blank'; 
anchor.download = this.props.file_name; 
anchor.click(); 

私も追加していない通知を取りますそれはDOMへのものなので、速いです。

P.S download属性はIEでは機能しません。しかし、新しいタブでリンクを開くだけです。 http://caniuse.com/#feat=download

関連する問題