2009-04-07 9 views
8

JavaScriptを使用してブラウザのダウンロードファイルプロンプトを実装する方法があるかどうかは疑問でした。JavaScriptを使用したブラウザダウンロードファイルのプロンプト

私の理由 - ユーザーがウェブサーバーからアクセスできないローカルファイルサーバーにファイルをアップロードすることが原因です。言い換えれば、どちらも異なるドメインになります!

たとえば、ウェブサイトはwww.xyz.comでホストされていますが、ファイルは\\10.10.10.01\Files\file.txtのようなアドレスのローカルファイルサーバーに存在します。どのようにローカルファイルサーバーにファイルをアップロード/転送していますか?ActiveXとVBscriptを使用してください。 (質問しないでください:-)

私は自分のデータベースにローカルファイルパスを保存し、そのデータをグリッドにバインドしています。ユーザーがそのリンクをクリックすると、ファイルがウィンドウで開きます(JavaScriptを使用します)。

問題は、テキスト、jpg、pdfなどの特定のファイルタイプがブラウザウィンドウ内で開いていることです。クライアントサイドスクリプトを使用してcontent-typeまたはcontent-dispositionを実装するにはどうすればよいですか?それも可能ですか?

EDIT: ローカルファイルサーバーには、ファイルが保存されるウィンドウの共有フォルダがあります。

+0

「ローカルファイルサーバー」はどのようなサーバーですか?実際のHTTP/FTP/Windowsの共有フォルダについて話していますか?(つまり、// 10.10.10.01ではなく\\ 10.10.10.01ですか? – Christoph

+0

Windowsの共有フォルダと実際のパスファイルは「\\ 10.10.10.01 \ Files \ file.txt」 – aix

+0

@aix:あなたは運が悪いです - HTTPヘッダーを使って適切なメタ情報を送信する方法がありません – Christoph

答えて

5

"content-disposition:attachment"はそれを強制する唯一の方法であり、これはレスポンスヘッダーに設定する必要があります。

+0

クライアント側で設定する方法?現在、私はjavascriptを使ってファイルを開いています。window.open( '\\ 10.10.10.01 \ Files \ file.t xt ')を押してファイルを開きます。これはウィンドウ内のファイルを開きます。 Is not "content-disposition:attachment"サーバー側の応答ヘッダーの設定? – aix

+0

質問に「これはレスポンスヘッダーに設定する必要があります」と述べたため、クライアントで設定することはできません。 – Quentin

1

type="application/octet-stream"のプレーンハイパーリンクを試してみることができます。 FFで動作するようですが、IEとOperaはその属性を無視します。

+0

スペックでは、IEとOperaが正しいです。 type属性は、 "これをサーバーから期待する"と言っているので、特定のコンテンツタイプを理解していないクライアントは、ダウンロードしようとする気にならない(ボットで最も役に立ちます)。実際のContent-Typeはそれを凌駕します。 – Quentin

+0

私の意見では、IEとOperaは間違っています:他のコンテンツタイプの情報がない場合(ここではそうです)、タイプatttributeによって与えられる 'advisory hint'(HTML仕様)はブラウザによって尊重されるべきです。 HTTPを介してファイルが送信されないため、属性を越える可能性のあるContent-Typeフィールドはありません – Christoph

4

ファイルはあなたの例のように、Webサーバー上でホストされている場合は、あなたが行うことができます:

window.location.replace(fileUrl); 

...とブラウザがファイルをどうするかを把握します。これは、.xls、.csvなどのほとんどのファイルで効果的ですが、ユーザーのMIMEハンドラの設定によってファイルの処理方法が決まるため、完全ではないことに注意してください。 .txtファイルはブラウザに表示される可能性が高く、「ファイルのダウンロード」ダイアログボックスは表示されません。

+0

これはアドレスバーにこれを置くことができることに注意してください: 'data:text/csv、a、b、c% 0ad、e、f'(3列2行のCSVファイルのダウンロードを作成します)。これが元の質問に沿っているかどうかはわかりませんが、そのプロンプトを作成する方法を尋ねると、私はここで終わりました。おそらく将来の読者に役立つでしょう:) – Luc

3

2015年8月の時点で、タグに「ダウンロード」属性を追加することで、少なくともChromeで探している動作が有効になります。

+1

Safari、Edge、IEでFirefoxをサポートしていないのは不幸なことですが、その事実は私にとっては役に立たないダウンロード属性です: – Sojtin

関連する問題