2013-09-05 17 views
32

Tôi có đoạn mã này:Làm thế nào để thiết lập tên tập tin chứa khoảng trống trong Content-Disposition tiêu đề

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

Khi tên tập tin là "a_b_c.doc" hoặc "abc.doc" tên của tập tin tải về được hiển thị chính xác. Tuy nhiên, khi tên tệp là "a b c .doc", tên của tệp được tải xuống chỉ là "a".

Làm cách nào để chúng tôi có thể giải quyết vấn đề này?

Trả lời

51

Sử dụng dấu ngoặc:

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

nếu tên tệp có " (không thể trong các cửa sổ nhưng các tập tin linux có thể có '' 'trong tên của chúng.) – Bor691

+0

không hoạt động đối với tôi: S –

+2

Đây là cách chính xác (giá trị tên tệp như chuỗi được trích dẫn) theo thông số HTTP 1.1: https: //www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1 – betatester07

0

nếu bạn trích dẫn tên tập tin của bạn với chr(34) nó sẽ làm việc:

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

'chr (34)' sẽ là trích dẫn ... –

4

Theo the HTTP standard bạn bao quanh chuỗi trong dấu ngoặc kép, và thoát khỏi bất kỳ dấu ngoặc kép hoặc dấu xồ nguợc bên trong bằng cách đặt trước chúng với một dấu gạch chéo ngược duy nhất.

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

Điều này sẽ nhắc lưu là Very "interesting" file \ files.txt. Lưu ý rằng sự hiện diện của dấu gạch chéo ngược không đề xuất một thư mục, nó cho thấy dấu gạch chéo ngược là một phần của tên tệp (tên này hoàn toàn hợp lệ trên Linux và một số nền tảng khác, nhưng không phải trên Windows.)

Các vấn đề liên quan