概要

WindowsでFTPクライアントソフトを使っていて、サーバーからのファイルのダウンロードに失敗するということがありました。

この問題の原因が分かりにくく、解決方法もあまりスマートとは言えないものでしたので、情報共有も兼ねて記事に残しました。

環境

  • Windows 11 21H2
  • Filezilla 3.60.1

問題について

FTPは、コンピューター間でのファイルの送受信を行うためのプロトコルです。FTPにおいて、ファイルを置いておくコンピューターをFTPサーバーやサーバー、ファイルをアップロードしたり、ダウンロードしたりするコンピューターをクライアントと呼びます。クライアントでは、FTPクライアントソフトやアプリと呼ばれる、専用のソフトをあらかじめインストールするなどして用意しておく必要があります。

今回遭遇した問題は、Linuxで構築されたFTPサーバーにWindowsからFileZillaというクライアントソフトを利用してアクセスして、ファイルをダウンロードするときに起きました。それは、ファイルのダウンロード時に、一部のファイルのダウンロードに失敗するというものでした。

FileZillaには、処理に失敗した場合、もう一度同じ処理を実行する機能があります。そのため、この機能を利用してもう一度処理を実行してみたのですが、それでも失敗してしまいました。

様々試してみたところ、ディレクトリの中身を全てダウンロードするようなときには失敗し、ファイルをひとつだけダウンロードする時には成功するということが分かりました。

しかしこれでは、FTPサーバーとして使い勝手が悪く、またダウンロードできたと思っていたのに、ダウンロードできていなかったという問題を発生する可能性があります。

根本的な解決方法はない

根本的な原因について調べることにしました。原因について調べてみると、次のことが分かりました。クライアントのWindowsとサーバーのLinuxで、ファイル名で利用できる文字に差があるということです。例えば、Windowsでは?や!、<、>のような一部の記号はファイル名に含めることができません。つまり、これらの文字を含むファイルをサーバーからダウンロードしようとして失敗していたということです。

実は、FileZillaのようなFTPのクライアントソフトでは、この問題を防ぐために、ファイル名を変換してダウンロードしてくれる機能があります。FileZillaの場合は、記号は全て_(アンダーバー)に置き換わっていました。しかし、なぜなのかディレクトリとその中身をダウンロードする際には、この処理がうまくいかず、ダウンロードに失敗してしまっていたようです。ひとつのファイルをダウンロードする際には、この処理がうまく機能していました。

このような理由から、根本的な解決方法はあまりないです。もちろん、FTPのクライアントソフトで適切にファイル名を変換するようにすることも考えられますが、そもそもファイル名が変わるというのは、ファイルを共有するという点では困ります。できるならば、ファイル名は同じである方が嬉しいでしょう。

そのため、対症療法として強いて挙げるならば、クライアントにWindowsではなくLinuxを使うことや、サーバーにファイルを置く際にファイル名を気をつけるということくらいしかできません。その他にも、クライアントにWindowsだけを利用するのであれば、Windowsで利用できない文字を含むファイル名のついたファイルが含まれる可能性は低いため有効と考えられます。しかし、macやLinuxからアクセスしたい人もいるでしょうから、この方法はあまりおすすめできません。

さいごに

Linuxやmacでは、Windowsでファイル名に使用できない文字を含むファイルをサーバーにアップロード可能ですので、その際にこのようなファイルが混じってしまったものと考えられます。

Windowsで利用できないファイル名があったのは記憶していたのですが、このような場面で苦しむとは思ってもいませんでした。Windows以外で、ファイル名をつける場合は気をつける必要がありそうです。