Разбор содержимого имени файла заголовка содержимого в multipart/from-data

В соответствии с RFC, в заголовке content-disposition multipart/form-data Поле filename получает в качестве параметра HTTP quoted string - строка между quites, где символ '\' может избежать любого другого символа ascii.

Проблема в том, что веб-браузеры этого не делают.

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"

Итак... как бы вы предложили решить эту проблему?

Есть ли у кого-нибудь идеи?

Ответ 1

Есть ли причина, по которой вам необходимо полностью проанализировать это имя файла?

По крайней мере одно единственное, что согласуется с тем, что часть filename заголовка заканчивается двойной кавычкой, так что вам просто нужно прочитать все между filename=" и окончательным ".

Затем вы можете обработать любую обратную косую черту, отличную от \\, \" или \", как литеральную обратную косую черту, если вы не считаете, что особенно вероятно, что пользователи будут загружать имена файлов с вкладками в них.:)

Ответ 2

Хотя старый поток, добавляя ниже 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();
    }