11

RFC によると、multipart/form-data content-disposition ヘッダーのファイル名フィールドは、パラメーターとして HTTP 引用符で囲まれた文字列を受け取ります。文字 '\' は他の ASCII 文字をエスケープすることができます。

問題は、Web ブラウザーがそれを行わないことです。

IE6 送信:

Content-Disposition: form-data; name="file"; filename="z:\tmp\test.txt"

期待の代わりに

Content-Disposition: form-data; name="file"; filename="z:\\tmp\\test.txt"

z:tmptest.txtの代わりにルールに従って解析する必要がありz:\tmp\test.txtます。

Firefox、Konqueror、および Chrome は " 文字をエスケープしません。たとえば、次のようになります。

Content-Disposition: form-data; name="file"; filename=""test".txt"

期待の代わりに

Content-Disposition: form-data; name="file"; filename="\"test\".txt"

では...この問題にどのように対処することをお勧めしますか?

誰にもアイデアはありますか?

4

2 に答える 2

4

古いスレッドですが、興味のある人のために以下の Java ソリューションを追加してください。

// import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.*;

    try {
        ContentDisposition contentDisposition = new ContentDisposition("attachment; filename=\"myfile.log\"; filename*=UTF-8''myfile.log");
        System.out.println(contentDisposition.getParameter("filename"));
    } catch (ParseException e) {
        e.printStackTrace();
    }
于 2016-05-18T07:42:57.557 に答える
2

このファイル名を解析する必要がある理由はありますか?

少なくとも一貫しているのは、ヘッダーの部分が二重引用符で終わることです。そのため、とfinalfilenameの間のすべてを読み取る必要があります。filename=" "

次に、ユーザーがタブを含むファイル名をアップロードする可能性が特に高いと思わない限り、おそらく 以外のバックスラッシュを\\\"または文字通りのバックスラッシュとして扱うことができます。\":)

于 2010-05-30T11:19:40.700 に答える