トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

BugTrack-wiki/347

ページの作成や編集にはユーザ登録が必要です。

特定文字を含む添付ファイルのダウンロード時、ファイル名が"wiki.cgi"になる

  • 投稿者: 清水
  • カテゴリ: 本体
  • 優先度: 低
  • 状態: 提案
  • 日時: 2015年02月15日 00時29分15秒

 内容

fswiki 3.6.4 FreeBSD 10.1(64bit)

添付ファイル名に漢字の "兵" を含むファイルをダウンロードすると、ファイル名が予め添付しておいた名称とは異なり、"wiki.cgi" になってしまいます。ファイルをローカルに保存するときに、ダイアログが出ますが、この時のファイル名が、"wiki.cgi" になってしまいます。自分でファイル名を変えてしまえば、ダウンロードは可能です。

しかし、パソコンに詳しくない方、情報リテラシーの低い方にとっては、特に拡張子が変わってしまうことから、ダウンロードは出来ても、そのファイルを利用出来ない、といった問題が生じます。

何か対策はございませんでしょうか。ブラウザは、IE11, Firefox, Chrome(WINDOWS 7/8)で確認しています。iOS,Androidについては未確認です。

 コメント

  • SandBoxにてテストしてみましたが、ファイル名は正常なようですね。標準のファイル添付機能を利用されていますでしょうか?それとも別のプラグインから添付したファイル?兵.txtというファイル名でのテストで問題がなかったのですが、ファイル名のサンプルを指定できますか? - KG (2015年02月16日 04時03分23秒)
  • コメント有難うございます。私が試したのも「兵.txt」です。このサイトのSandBoxでは確かにダウンロードできました・・・。私が設置したfswikiはかれこれ10年近く運用しておりまして、これまでにどんなパッチを充てたのか自分でも把握し切れていません。まずは標準のソースと比較したいと思いますが、/plugin/attach/ 以外で確認した方が良いところはございますか? また、書き忘れましたが、httpsで運用しています。 - 清水 (2015年02月24日 20時50分37秒)
  • これまでに当てたパッチを元に戻していったところ、/lib/Util.pmが原因でした。BugTrack-wiki/335(長いファイル名の添付ファイルをダウンロードすると Internal Server Error が発生する)の fswiki-japanese-filename-firefox.patch を当ててあったのですが、これを元に戻したら、兵.txt がファイル名の通りにダウンロードできるようになりました。しかし、当然、長いファイル名のダウンロードは Internal Server Error に戻ってしまいました。 - 清水 (2015年02月24日 21時21分19秒)
  • IE判定で IE11 から MSIE の文字が消えているので sjis変換が行われなくなった為でしょう。 /MSIE/ を /MSIE|Trident/ と変更すれば sjis変換されるようになりますよ。 - KG (2015年02月26日 10時59分49秒)
  • すみません、これも記載忘れでしたが、問題が出ているサイトは、fswiki-japanese-filename-firefox.patchを当て、さらに当該部分のUAをIE11対策のため単に Trident としていました。この状況では、MSIE、Firefoxともに、兵.txt のみ、wiki.txt 又は wiki.cgi としてダウンロードしようとします。他の日本語ファイルは問題ありません。 - 清水 (2015年02月26日 22時35分45秒)
  • オリジナル: - 清水 (2015年02月26日 22時36分36秒)
my $encoded = ($ua =~ /MSIE/ ? &Jcode::convert($filename, 'sjis') : Jcode->new($filename)->mime_encode(''));
  • 兵のみ問題: - 清水 (2015年02月26日 22時38分24秒)
my $encoded = ($ua =~ /MSIE|Trident/ ? &Jcode::convert($filename, 'sjis') : Jcode::convert($filename, 'utf8'));
  • 少し変更:・・・このようにしましたところ、Firefoxでは長いファイル名も兵.txtも他の日本語ファイルも問題なくダウンロード出来るようになりました! ・・・IE11では依然として兵.txtはwiki.txtとしてダウンロードしようとします。 sjis変換を何とか修正すれば・・・もう少し試行錯誤します。 - 清水 (2015年02月26日 22時43分49秒)
my $encoded = ($ua =~ /MSIE|Trident/ ? &Jcode::convert($filename, 'sjis') : Jcode->new($filename)->mime_encode('utf8'));
  • IE10ですが、再現できました。下記のように修正することで兵.txtも正常に取得できるでしょう。 - KG (2015年02月27日 15時59分05秒)
my $encoded = ($ua =~ /MSIE|Trident/ ? Jcode->new($filename)->sjis : Jcode->new($filename)->mime_encode('utf8'));
  • ちなみに、私の環境では mime_encode('utf8') を使用すると長いファイル名でエラーが出ます(Firefoxで確認)。対応策として下記のように記述しています。 - KG (2015年02月27日 16時07分50秒)
# mime_encode('utf8')の代わりの変換処理
"=?utf-8?B?".MIME::Base64::encode_base64(Jcode->new($filename)->utf8,'')."?="
  • 最終的なコードは以下のようにしています。 - KG (2015年02月27日 16時14分07秒)
my $encoded = ( $ua =~ /MSIE|Trident/i   ? Jcode->new($filename)->sjis
              : $ua =~ /Chrome|Firefox/i ? "=?utf-8?B?".MIME::Base64::encode_base64(Jcode->new($filename)->utf8,'')."?="
              : Jcode->new($filename)->utf8 );
return "Content-Disposition: $disposition;filename=\"".$encoded."\"\n\n";
  • ご提示頂いたコードに差し替え、兵.txt、アルファベットのみの長いファイル名、日本語を含む長いファイル名が、IE11/Firefoxの両方で名称通りにダウンロード出来るようになりました。調査・サポートして下さったKG様、大変有難う御座いました! - 清水 (2015年02月27日 20時43分29秒)
  • 当方でもIE11でファイル名が文字化けするという問題が解決できました。ありがとうございます。 - 名無しさん (2015年06月12日 11時37分47秒)
  • 当方の「Firefox 43.0.4」では、上記の設定でエラーが出てしまいます。IE11はとりあえず諦めて、元の設定に戻してしまいました。 - cadp (2016年01月16日 01時32分49秒)
  • cadpさん、こちらでも「Firefox 43.0.4」にて検証しましたが上記の「最終的なコード」にてダウンロードファイル名は正常に取得できています。標準のrefプラグインで添付されたファイルですか?また、fswikiのバージョンと上記コードにて修正された箇所等も教えて頂けると検証しやすいです。 - KG (2016年01月20日 17時06分39秒)
  • なるほど、そんなふうに考えれば良いのですね。当方は「_ex_attach」で添付したファイルでした。Wikiは「3.6.4」でコードは、上記のコードをまるごとコピーしました。 - cadp (2016年01月26日 19時29分01秒)
  • Windows 2012サーバー上でのWiki環境です。 - cadp (2016年01月26日 19時33分17秒)
お名前: コメント:

最終更新時間:2016年01月26日 19時33分17秒