2013-09-05 7 views
32

ho questo pezzo di codice:Come impostare il nome del file che contiene spazi in Content-Disposition

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

Quando il nome del file è "a_b_c.doc" o "abc.doc" il nome del file scaricato è visualizzato correttamente. Tuttavia, quando il nome del file è "a b c .doc", il nome del file scaricato è solo "a".

Come possiamo risolvere questo?

risposta

51

Utilizzare le virgolette:

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

cosa succede se il nome file è "in (non è possibile in Windows ma i file Linux potrebbero avere "" "nel loro nome.) – Bor691

+0

non funziona per me: S –

+2

Questo è IL modo corretto (valore del nomefile come stringa quotata) secondo specifica HTTP 1.1: https: //www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1 – betatester07

0

se si cita il nome del file con chr(34) funzionerà:

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

'chr (34)' sarebbe virgolette ... –

4

Secondo the HTTP standard si circondano la stringa con virgolette, e sfuggire a qualsiasi virgolette o backslash all'interno precedendoli con un singolo backslash.

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

Questo vi chiederà di salvare come Very "interesting" file \ files.txt. Si noti che la presenza di una barra rovesciata non suggerisce una cartella, suggerisce che la barra rovesciata fa parte del nome file (che è perfettamente valida su Linux e alcune altre piattaforme, ma non su Windows.)