我已經嘗試了所有我能想到的。我已經改變了mime類型100次。更改標題400次。我已經翻閱了十多遍。這在Chrome中正常工作。不久,我去Firefox下載它認爲這是一個xlsx文件,或二進制文件。它甚至以xlsx打開,但它不認爲它是一個csv,所以列不分離。如果我保存文件(而不是打開),它甚至不會打開擴展名。我甚至還沒有去過IE,所以這讓我很擔心。Firefox不會將該文件作爲CSV下載
mime mapping
<mime-mapping>
<extension>csv</extension>
<mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>
我試過text/csv,application/csv,application/binary,application/octet-stream。
public void doDownloadFile() {
PrintWriter out = null;
try {
String fileName = selectedPkgLine.getShortname() + ".csv";
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
response.setHeader("Pragma", "public");
response.setHeader("Expires", "0");
response.setContentType(request.getServletContext().getMimeType(fileName));
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Content-disposition", "attachment; filename=" + fileName + "");
response.setHeader("Content-Transfer-Encoding", "binary");
out = response.getWriter();
CSVWriter writer = new CSVWriter(out);
List<PkgLoad> pkgLoadList = pkgLoadService.findBetweenDates(selectedPkgLine, startDate, endDate);
List<String[]> stringList = new ArrayList<String[]>();
stringList.clear();
String[] header = {
"pkg_load_id",
"time_stamp",
"ounces",
"revolutions",
"wrap_spec_id",
"pkg_line_id"
};
stringList.add(header);
for (PkgLoad pkgLoad : pkgLoadList) {
String[] string = {
pkgLoad.getPkgLoadId().toString(),
pkgLoad.getTimeStamp().toString(),
pkgLoad.getOunces().toString(),
pkgLoad.getRevolutions().toString(),
pkgLoad.getWrapSpecId().getWrapSpecId().toString(),
pkgLoad.getPkgLineId().getPkgLineId().toString()
};
stringList.add(string);
}
response.setHeader("Content-length", String.valueOf(stringList.size()));
writer.writeAll(stringList);
out.flush();
} catch (IOException ex) {
Logger.getLogger(ViewLines.class.getName()).log(Level.SEVERE, null, ex);
} finally {
out.close();
}
}
感謝您的幫助。
Safari,Opera和Chrome工作正常。沒有試過IE。
**** ****編輯
確定這整個時間,這是一個間距問題。我的文件名是「文件名.csv」,這可以在除firefox以外的所有瀏覽器中使用。不久,我把我的文件名「filename.csv沒有空格,它下載了它,我沒有注意到它下載時只是在空間前下載了名字的第一部分。祝你好運!
你應該試試IE瀏覽器,看看你到達那裏的結果。也許這會告訴你更多關於你使用Firefox的問題。 – AudioDroid 2011-03-01 14:53:43
請注意,只有當通過直接鏈接/調用或者使用'ServletContext#getMimeType()'從public webcontent提供資源時才使用''。在這個特定的目的中,你提供響應並自己設置Content-Type頭部是無關緊要的。 –
BalusC
2011-03-01 15:10:39
是的,我明白。我只是想盡一切辦法。這個特定的代碼適用於IE8。它認爲它是一個csv,我可以保存並打開它。我不知道Firefox有什麼問題。 – 2011-03-01 15:15:34