私のチームは仕事中私はGWTアプリケーションを開発しています。 プログラムは動作していますが、今ダウンロードできるExcelテーブルは* .xlsxでxlsではありません。 このプロジェクト全体が私には新しく、自分自身をGWTの初心者だと考えています。GWT Excelをダウンロードする.xlsxは私に壊れたファイルを与えます
Exceltableにファイル名が指定されたコードでは、最後に+ ".xls"があります。しかし、私が+ "。xlsx"に変更してアプリケーションをテストすると、ダウンロードはまだ動作しますが、Excelでファイルを開こうとすると、エラーメッセージが表示され、ファイルが破損していることがわかりますか? (.xls works)
GWTでserverSiteで生成されたExcelでダウンロードがどのように機能するのか説明できますか? たぶん、あなたは事前に
おかげ
編集(私は彼に尋ねることができないので、悲しいことに、このアプリケーションのプログラマが休日である...) が破損するファイルの原因をいくつかのアイデアを持っている:
public class Download extends HttpServlet {
private static final long serialVersionUID = 5580666921970339383L;
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String filename = (String)request.getSession().getAttribute(CrossReportConstants.ATTR_FILENAME);
byte[] data = (byte[])request.getSession().getAttribute(CrossReportConstants.ATTR_REPORT);
request.getSession().setAttribute(CrossReportConstants.ATTR_FILENAME, null);
request.getSession().setAttribute(CrossReportConstants.ATTR_REPORT, null);
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=" + filename);
response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setContentLength(data.length);
try {
InputStream in = new ByteArrayInputStream(data);
ServletOutputStream out = response.getOutputStream();
byte[] outputByte = new byte[4096];
// copy binary contect to output stream
while (in.read(outputByte, 0, 4096) != -1) {
out.write(outputByte, 0, 4096);
}
in.close();
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
あなたがコードを提供するよう
変更しようとしているコードを入力することはできますか? httpレスポンスのファイル名を変更するだけで、コンテンツタイプは変更しないように思えます。 – Akkusativobjekt
@Akkusativobjekt問題は実際にここにコードを投稿することは許されていません....そして、プロジェクト全体は比較的大きく、80以上のクラスがあり、現時点で私は何かを変えなければいけないと思っています....悲しいことに彼は休日にいるので私の同僚に尋ねることはできません....私はそれを共有するコード部分を見つける場合 – KilledByCheese
それは、response.setContentType( "application/vnd.ms-excel")のような何かのためのHttpServletの見た目です。 – Akkusativobjekt