- ベストアンサー
ファイルのアップロードに関する問題
- CGIとPerlを使用してファイルのアップロードを実現しようとしています。画像系はうまくいくが、テキスト系をアップロードすると、ダウンロード時に余分な改行が挿入されてしまいます。
- 問題の原因は特定できず、サーバーのOSやFTPソフトのバージョンによって結果が異なるようです。Redhat5.0の場合は正常に動作したこともあるそうです。
- この問題について詳しい方からのアドバイスを求めています。どのような原因が考えられるのか教えていただければ幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
テキストの場合は、アスキーモードでアップロードするのは少々面倒です。 テキストファイルと分かっているファイルの場合、意識的に改行コードから \r をすべて除いてあげなくてはいけません。 NextFTP は、改行コードが \n と \r のどちらが来てもいいように、この2つのコードを「それぞれ」\n\r に変換してしまっているからです。 この機能はIEにも搭載されています。 RedHat はおそらく、Content-type: text がくると自動的にそれを探知して改行コードの問題を解決してくれるんだと思います。 これは RedHat 固有の機能だと思うので、これには期待しない方がいいでしょう。 置き換え処理は、シフトJISの場合、正規表現で s/\r//g; とすればOKです。
その他の回答 (2)
えー。 1はイエスです。 で、2ですが……。 何でしょうそれは(笑) あるいはIE5が改行を勝手に \n\r から \n に変換してくれたんでしょうか? だとしたらつじつまが合うんですが。
お礼
何度も、大変有難う御座いました。 自分で出した結論としては、NextFTP場合拡張子を.txt以外にするとバイナリーと認識するということ。当面は、拡張子を変えてやろうと思います。(笑)
そうです。 これはダウンロードするときの問題なので、アップロードするときは規定通り動いているはずです。 ですので、IEのマルチポートはアップロード時の話なので、やっぱり駄目なはずです。
補足
有難うございます。たびたびすいません。あと一つだけ質問させてください。 1、改行コードCRLF(\r\n)の場合、\n\r\n\rは、一行ごとのはなしですよね? 2、検証してみたところ、IE5をつかっているのですが、IEでアップロードしたものをNextFTPでバイナリーモードでダウンロードする場合は、何の問題もありませんでした。これは、なぜでしょうか?
補足
有難うございます。参考になります。補足で質問させてください。 改行コードCR(\n)でアップロードしても変な改行がはいってしまいます。 テキストでも、画像でもサーバー上で、バイナリーとして読み込んで保存する場合は、改行の問題はかかわってこないということですよね。問題となるのは、その保存された、テキストをNextFTPでダウンロードするときということでしょうか? このときたとえば、改行コードCRLF(\r\n)の場合、\n\r\n\rに変換されてしまうといことでしょうか? また、IEのformタグでマルチポートの指定をしていても、アスキーモードになってしまうのでしょうか?