2010-05-29 7 views
10

Gemäß RFC, in multipart/form-data content-disposition Header Dateiname Feld als Parameter HTTP in Anführungszeichen String - Zeichenfolge zwischen Quites, wo Zeichen '\' kann entkommen irgendein anderes ASCII-Zeichen.Parsen des Headers content-disposition header in multipart/from-data

Das Problem ist, Webbrowser tun es nicht.

IE6 sendet:

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

erwartete Statt

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

die als z:tmptest.txt nach Regeln analysiert werden soll, anstatt z:\tmp\test.txt.

Firefox, Konqueror und Chrome kann nicht entkommen "Zeichen zum Beispiel:

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

Statt

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

So ... wie würden Sie mit diesem Thema befassen vorschlagen

?

Hat jemand eine Idee?

Antwort

2

Gibt es einen Grund, dass Sie diesen Dateinamen überhaupt analysieren müssen?

Wenigstens die eine Sache, die konsistent ist, dass der filename Teil des Headers mit einem doppelten Anführungszeichen endet, so brauchen Sie nur in alles, was zwischen filename=" und den letzten" zu lesen.

Dann können Sie wahrscheinlich jede Backslash andere als \\, \" oder \" als Backslash behandeln, es sei denn, Sie denken, es ist besonders wahrscheinlich, dass Benutzer Dateinamen mit Registerkarten in ihnen werden hochladen. :)

+2

"Gibt es einen Grund, dass Sie diesen Dateinamen überhaupt analysieren müssen?" - ja ich möchte den Dateinamen wissen;). "Zumindest ist die eine Sache, die konsistent ist, dass der Dateiname Teil der Kopfzeile mit einem doppelten Anführungszeichen endet," Die Dateinamen und Name Felder sollten nicht in dieser bestimmten Reihenfolge kommen, so ist es eine schlechte Idee zu nehmen, dass Dateiname mit der letzten endet Anführungszeichen. – Artyom

+0

Wollen! = Brauchen. ;) Ok, also ist zumindest garantiert, dass es mit "" oder mit "" endet; '- mit diesem Mangel an Konsistenz müssen Sie einige Zugeständnisse machen, wie sich auf die Tatsache verlassen, dass Benutzer' '' nicht in der Mitte ihrer Dateinamen setzen :) Alternativ verwenden Sie ein Web-Framework, das unterstützt ein Best-Effort-Parsing dieses Attributs für Sie? –

1

Obwohl ein alter Thread, Hinzufügen der untenstehenden Java-Lösung für wen auch immer interessiert sein könnte.

// 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(); 
    } 
+0

Da die Frage nicht speziell für Java ist, wäre eine Erklärung, wie dies das Problem löst, nützlich. –

+0

Einverstanden. Während ich auf der Suche nach dem gleichen Problem, fand ich sogar einen Thread zur Diskussion regex pattern (http://StackOverflow.com/a/27226712/3940047) .Diese Lösung wurde hinzugefügt, da es jemandem im selben Kontext helfen könnte.Menschen googeln einfach mit passenden Keywords und können hier landen und wenn sie zufällig Java-Leute sind, könnten sie finde es nützlich. –