我寫了一個用於下載excel文件的代碼。從數據庫派生的文件內容。代碼在本地機器上工作,但部署在服務器上。 Excel文件在下載時被破壞。我無法在我的代碼中找到問題。請幫我擺脫這個問題。第一種方法導出excel和第二種方法寫入excelsheet中的內容。第二種方法是用第一種方法調用的。使用java從服務器下載Excel文件時出現損壞
public static void doGetExportException(String sheetId, ResourceRequest resourceRequest, ResourceResponse resourceResponse) throws ServletException, IOException
{
HttpServletResponse response = PortalUtil.getHttpServletResponse(resourceResponse);
try
{
long maxSheetId = Long.parseLong(sheetId);
System.out.println("maxSheetId="+maxSheetId);
List<Customer_Exception> lstCustomer_Exceptions =UploadExcelUtil.getCustomerExceptions(maxSheetId);
XSSFWorkbook outPutSheet= writeExcelsheet(lstCustomer_Exceptions);
ByteArrayOutputStream outByteStream = new ByteArrayOutputStream();
outPutSheet.write(outByteStream);
byte [] outArray = outByteStream.toByteArray();
String fileName = "Download_"+new Date(new java.util.Date().getTime())+".xlsx";
response.setContentType("application/ms-excel; charset=UTF-8");
response.setContentLength(outArray.length);
response.setHeader("Expires:", "0");
response.addHeader(HttpHeaders.CACHE_CONTROL, "max-age=3600, must-revalidate");
response.addHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename="+fileName);
response.addHeader(HttpHeaders.CONTENT_ENCODING, "Binary");
OutputStream outStream = response.getOutputStream();
outStream.write(outArray);
outStream.flush();
outStream.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private static XSSFWorkbook writeExcelsheet(List<Customer_Exception> lstCustomer_Exceptions) {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Exceptions");
CellStyle styleHeader = workbook.createCellStyle();
XSSFFont fontHeader = workbook.createFont();
XSSFColor color = new XSSFColor(Color.BLACK);
fontHeader.setColor(color);
fontHeader.setBold(true);
fontHeader.setFontHeight(13);
styleHeader.setFont(fontHeader);
sheet.createFreezePane(0, 1);
CellStyle styleData = workbook.createCellStyle();
XSSFFont fontData = workbook.createFont();
fontData.setColor(color);
fontData.setFontHeight(12);
styleData.setFont(fontData);
int rownum = 0;
XSSFRow rowHeader = sheet.createRow(rownum++);
List<String> lstCellHeaders =getCellHeaders();
int cellnum = 0;
for(String cellHeader:lstCellHeaders){
XSSFCell cell = rowHeader.createCell(cellnum++);
cell.setCellStyle(styleHeader);
cell.setCellValue((String)cellHeader);
}
for (Customer_Exception customer_Exception:lstCustomer_Exceptions) {
List<String> lstCellValues =getCellValues(customer_Exception);
XSSFRow rowData = sheet.createRow(rownum++);
cellnum = 0;
for(String cellValue:lstCellValues){
XSSFCell cell = rowData.createCell(cellnum++);
cell.setCellStyle(styleData);
cell.setCellValue((String)cellValue);
}
}
return workbook;
}
在服務器/客戶端發生任何異常?捕獲所有異常是一種不好的做法,如果您在請求處理過程中無法處理/從錯誤中恢復,則應該重新拋出它(可能被打包)或使用適當的http代碼(例如500)進行響應。 – Pyranja
我已經添加catch來找出下載過程中的問題,並希望向用戶顯示適當的massege。 – user2515040
我已經得到了解決方案。我已經刪除了「response.addHeader(HttpHeaders.CONTENT_ENCODING,」Binary「);」那麼它的工作正常 – user2515040