2011-11-04 55 views
7

下面的Java代碼被用於下載throgh Web應用程序所請求的日誌文件:空的空間,同時下載文件

protected HttpServletResponse response; 
.... 

    response.setContentType("application/octet-stream"); 
    String filename = OrgName + ".log"; 
    response.setHeader("Content-Disposition", "attachment; filename= " + filename); 
    OutputStream os = response.getOutputStream(); 
    os.write(getFile()); 
    os.close(); 

問題是當OrgName包含了諸如「XYZ私人有限公司」的空間,在這個案例文件將以名稱「Xyz」而不是「Xyz Pvt Ltd.log」下載。第一個空格之後的名稱部分被忽略。請注意,該文件正確下載,它只是沒有正確顯示的名稱。有什麼我做錯了嗎?或者它是一種標準行爲?

環境:的Struts 2時,JBoss 5.1.0,Mozilla Firefox瀏覽器3.5.3

+0

我認爲是依賴於瀏覽器。剛剛在IE(8.0)Chrome中試過,它工作。 – Santosh

回答

13

我想我找到了你的問題。只需將文件名稱字符串設置爲引用

response.setHeader("Content-Disposition","attachment; filename=\"" + filename + "\""); 

這應該可以解決您的問題。

+0

是的,它工作。非常感謝 :) –

0

我認爲你將不得不使用的空間編碼你可以看看阿帕奇的base64編碼器,我記得空間得到編碼到%20%,因此在解碼時你將能夠用空格檢索文件名。

+0

如果你這樣做,它將佔據%20%作爲文件名本身的一部分,並不會將其顯示爲空格字符。 – Santosh