電子書籍の厳選無料作品が豊富!

cakephpで画像のダウンロード機能を実装しています。

webroot/imgに画像は入っています。 controllerで
public function download($filename = null){
$this->autoRender = false;
$this->response->file('img/' . $filename);
$this->response->download($filname);
}
とし、
viewで
<?php
echo $this->Html->link('ダウンロード', array('controller' => 'images','action' => 'download', $image['Model']['filename']));
?>
このようにリンクしています。

ファイル名が英語の画像は問題なくダウンロードできるのですが、ファイル名が日本語の画像がダウンロードできません。

The requested file img/日本語ファイル名.jpg was not found or not readable
Error: The requested address '/illusts/image/%~.jpg' was not found on this server.

リンクをクリックするとこのように表示されます。
webroot/imgにはちゃんと画像は入っているのですが・・・。
どのようにしたら、日本語名のファイルもダウンロードできるようになるのでしょうか。

どなたかご教授ください。
よろしくお願いいたします。

A 回答 (2件)

$filenameをshift_jisに変換したらできる気がします。



参考URL:http://pentan.info/php/mkdir_ja.html

この回答への補足

ご回答ありがとうございます。

アドバイス頂いた通り、$filenameをshift_jisにしてダウンロードのリンクをクリックしたところ、
The requested file img/日本語ファイル名.jpg was not found or not readable
の表示は消えました。
ただ、
Error: The requested address '/illusts/image/%~.jpg' was not found on this server.
は表示されたままでして…。
image/の後の%~.jpgが原因だとは思うのですが、何か対処法ご存知でしょうか。
もしよろしければ、よろしくおねがいします。

補足日時:2014/07/30 09:41
    • good
    • 0
この回答へのお礼

解決できました。
ありがとうございました。

お礼日時:2014/07/31 10:39

>日本語名のファイルもダウンロードできるようになるのでしょうか。



原則「日本語ファイル名をつかわない」の言うのが妥当な回答です
インターネットの仕組み上日本語ファイルはよほどユーザーの環境を制限しない限り
ただしくアクセスすることは難しいです(たとえばIE限定とか)

またサーバー上におかれるファイル名も念のためなんらかのエンコードした形式に
変更しておき、ダウンロードの際にデコードするなり名前をつけかえるなり
工夫が必要でしょう。(phpであればurlencodeなど)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

やはり日本語ファイル名を使わないことが1番ですよね。
ただ、もし方法があるなら…と思いまして…。

urlencode参考にさせて頂きます!
ありがとうございました。

お礼日時:2014/07/30 09:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!