我正在使用此代碼從JSF頁面下載文件。從JSF頁面下載具有適當擴展名的文件
public String downloadFile(String fileName) {
try {
String reportPath = "/opt/download" + File.separator + selectedDownloadValue + File.separator + fileName;
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
// use this code if the package is located insight the WAR package
File file = new File(reportPath);
if (!file.exists()) {
response.sendError(HttpServletResponse.SC_NOT_FOUND, "No file " + reportPath);
}
int DEFAULT_BUFFER_SIZE = 10240;
response.setBufferSize(DEFAULT_BUFFER_SIZE);
response.setHeader("Content-Length", String.valueOf(file.length())); // Display file size during download
response.setHeader("Content-Type", "application/octet-stream");
response.setHeader("Content-Transfer-Encoding", "Binary");
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
BufferedInputStream bIn = new BufferedInputStream(new FileInputStream(file));
int rLength = -1;
byte[] buffer = new byte[1000];
while ((rLength = bIn.read(buffer, 0, 100)) != -1) {
response.getOutputStream().write(buffer, 0, rLength);
}
FacesContext.getCurrentInstance().responseComplete();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
但對於我下載某些原因,文件擴展名爲some_file.exe.xht
我試圖添加額外的信息,但是沒有結果。 也許在下載之前需要獲取文件擴展名?有沒有解決方法?
謝謝你的答覆。一個問題是什麼包,我需要包括因爲該行'Files.copy(文件,response.getOutputStream());'我得到的錯誤'沒有合適的方法找到了副本(文件,ServletOutputStream的) 方法Files.copy(路徑,路徑,CopyOption ......)不適用 (參數不匹配;文件無法轉換爲路徑) 方法Files.copy(的InputStream,OutputStream的)是不是applicable' –
剛剛從標準的Java SE:'java.nio.file。 Files'。我只忘記輸入'toPath()',我解決了答案。 – BalusC