JavaScriptでファイルをダウンロードのやり方は,誰か知っている人がいましたらご教授願います。
普通は、JavaScriptでは、ダウンロードはしませんが...。
誤解を恐れずに、言ってしまえば、普通は、ファイルの拡張子で決まります。たとえば、拡張子をlzhにすれば、まず、ダウンロードになります。
回答ありがとうございます。
実は拡張子が.doc,.xlsです,よろしくお願いします。
>実は拡張子が.doc,.xlsです,よろしくお願いします。
サーバ上のすべてのこの拡張子のファイルをダウンロードなら、サーバの設定。
特定のこの拡張子のファイルをダウンロードなら、CGIをかます。
すべてですか?特定ですか?
すみません,CGIで書きたいです,
今は 「Location: $file_name」で.csvのファイルをダウンロードできましたけど,.docと.xlsのファイルは同じ書き方でできないみたいですが,困っている。
よろしくお願いします。
以下の感じでどうでしょうか?
(ちなみに、未テスト)
open( DL, $file_name);
$file = <DL>;
close( DL );
print "Content-type; application/octet-stream\n\n"; # MIME出力
print "$file";
1. $file = <DL>;
では、改行が含まれていた場合に一行のみになってしまうので、
read(DL, $file, (-s $file_name));
にした方が良いと思います。
2. MSオフィス系アプリケーションがセットアップされているPCから
".csv"や".xls"や".doc"等を下記のヘッダでダウンロードさせよう
としても、無視してエクセル等が起動されてしまいます。
(IEのバージョンにも依存するかも知れません)
print "Content-type; application/octet-stream\n\n";
私は下記のヘッダにしています。
print "Content-type: application/download\n";
# ダウンロードダイアログの初期表示ファイル名をお好み指定--->$default_name
print "Content-disposition: filename=\"$default_name\"\n\n";
1、2をふまえ、下記のようにしてはどうでしょうか?
-------------------------------------------
open(DL, $file_name);
read(DL, $file, (-s $file_name));
close(DL);
$default_name = substr($file_name, (rindex($file_name, "/") + 1) );
print "Content-type: application/download\n";
# ダウンロードダイアログの初期表示ファイル名をお好み指定--->$default_name
print "Content-disposition: filename=\"$default_name\"\n\n";
print $file;
-------------------------------------------
>>1
>誤解を恐れずに、言ってしまえば、
これは、完全に誤りです。
ファイルの種類は、HTTPレスポンスヘッダのContent-Typeヘッダフィールドで決まります。通常はサーバ側で拡張子とContent-Typeヘッダの関連付けがされているので、拡張子をつけると適切なContent-Typeヘッダを付加してクライアントに文書が送られるわけです。
まともなブラウザであれば、Content-Typeヘッダとブラウザ・OSの設定を見て適切な動作をするはずです。
IEは、まともなブラウザではありません。Content-Typeヘッダ以外に文書の内容などを見て決めます。そのため、HTMLソースをtext/plainとして送ってもHTML文書としてレンダリングしようとしたり、先頭に「GIF87a」と書かれたtext/plainな文書を画像として表示しようとしたり、音声ファイルを装った「ハードディスクを初期化する実行プログラム」を実行してしまったりします。
ということで、このようなタコブラウザに対しては、「ご面倒ですが、右クリックでファイルに保存するを選択して下さい」で我慢してもらっています。
gun氏、ひじ氏、フォロー感謝です。
みんないろいろ教えてくれました,ありがとうございました。
今はgunさん教えてくれたやり方でやってみた,できました。
また質問があるが
今のやり方でファイルをクッリクして,そのファイルはブラウザで開いて,ダウンロードできる
今回はこのファイルをクッリクして,「ファイルのダウンロード」画面が出で,直接ダウンロードを実行されて,どうしますか?
よろしくお願いします
ん...。理解不能。
そうですね。
ちょっと状況がわかりにくいです。
我々が状況をつかみやすいように、もう一度、
1.現在の状況
2.実現したいこと
に分けて、再投稿をお願いします。>> kyuさん
gunさんおひさです。
さて多分質問者の言ってる事ですが多分右クリックで保存ではなく
クリックすればDL実行が出てくるようにしたいと言う意味ではないでしょうか?
だから<!-- #BeginEditable "download" -->
ダウンロードタグって自分は理解しましたが違ったらごめんなさい
私が>> 6 にて回答した方法だと、クリックによって、IEの場合は、
"ファイルを開くか、ファイルをコンピュータに保存するか選択してください"
[ 開く ] [ 保存 ] [ キャンセル ] [ 詳細情報 ]
というダイアログが表示されます。
これは実現できたみたいですので、右クリックのことではないと思います。
> ブラウザで開いてダウンロードできる
という表現をそのまま解釈すると、"IEにはめ込まれで起動されたオフィス系
アプリケーション内にファイルが表示される" という意味に感じられます。
ただ、これも予想にしかすぎませんので、kyuさんの回答待ちですね(^-^;
みんなごめんなさい,私の日本語はよくないだから,すみません。。
今はgunさんの方法で
print "Content-type: application/download\n"; print "Content-disposition:filename=\"$default_name\"\n\n"; print $file;
IEでこのファイルを直接開いて
以下の方法で
print "Content-type: application/octet-stream; name=\"$file2\"\n";
print "Content-Disposition: attachment; filename=\"$file2\"\n\n";
”このファイルは上記の場所から開く,このファイルを保存する”
[ OK ] [ キャンセル ] [ 詳細情報 ]
というダイアログが表示されます。
この方法とgunさんのやり方はなんか違うとこるありますか?よく分からないので,ぜひ教えてください,よろしくお願いします。
IEで、以前のバージョンで下のURLのようなことがありました。
http://support.microsoft.com/default.aspx?scid=KB;en-us;q267991
私のPCは、IE6になってしまっているので、kyuさんの質問を試す
ことができません。IE6からだと、どちらとも同じように表示
されました。
なるほど,私のIEバージョンは5.5です,ありがとうございました。
みなさん忙しいところいろいろ教えてくれました,こころ感謝します。
今後もよろしくお願いいたします。
元質問者がどういう状況で使おうとしているのか未だに分からないが、
利用者の環境を制限できるイントラネットならともかく、
どんなUAが来るか分からないインターネット上で使おうとするのであれば、
http://www.iana.org/assignments/media-types/
に登録されていない非標準のmedia typeは使うべきではないと思う。
application/octet-stream でIEで不便になるのであれば、IEが標準を守っていないからであり、自業自得である。
ひじさん,教えてくれました,ありがとうございました。またよろしくお願いします。