2013-09-05 3 views
32

Ich habe dieses Stück Code enthalten:Wie Dateinamen setzen Räume in Content-Disposition-Header

resp.addHeader("Content-Disposition", "inline; filename=" + fileName); 

Wenn der Dateiname „a_b_c.doc“ oder „abc.doc“ der Name der heruntergeladenen Datei ist wird korrekt angezeigt. Wenn der Dateiname jedoch "a b c .doc" lautet, lautet der Name der heruntergeladenen Datei nur "a".

Wie können wir das lösen?

Antwort

51

Verwenden Zitate:

resp.addHeader("Content-Disposition", "inline; filename=\"" + fileName + "\""); 
+1

Was ist, wenn der Dateiname "in." (Es ist nicht in Windows möglich, aber Linux-Dateien können "" in ihrem Namen haben.) – Bor691

+0

funktioniert nicht für mich: S –

+2

Dies ist die korrekte Weise (Dateiname Wert als String in Anführungszeichen) nach HTTP 1.1 Spezifikation: https: //www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1 – betatester07

0

, wenn Sie Ihren Dateinamen mit chr(34) zitieren wird es funktionieren:

resp.addHeader("Content-Disposition", "inline; filename=" + chr(34) + fileName + chr(34)); 
+1

'chr (34)' wäre Zitate ... –

4

the HTTP standard Nach Sie die Zeichenfolge mit doppelten Anführungszeichen umgeben, und die Flucht keine Anführungszeichen oder Schrägstriche indem Sie ihnen einen einzelnen Backslash voranstellen.

Content-Disposition: attachment; filename="Very \"interesting\" file \\ files.txt" 

Dies wird prompt als Very "interesting" file \ files.txt zu speichern. Beachten Sie, dass das Vorhandensein eines umgekehrten Schrägstrichs keinen Hinweis auf einen Ordner gibt. Der umgekehrte Schrägstrich ist Teil des Dateinamens (der unter Linux und einigen anderen Plattformen, aber nicht unter Windows einwandfrei funktioniert.)