tomcatとpostgresqlを使用したSeamアプリケーション9.0.3
アプリケーションでは、DBに保存されている単語文書をBLOBとしてダウンロードし、Beanでバイト配列として定義できます。javaダウンロードword doc、内容は16進数で表示
これらのワード文書は、ユーザーによってxml形式でアップロードされています。
WindowsでこのコードをTomcat(5)と併用すると、うまく動作します。 LinuxサーバーでTomcat(v。6.0.24)と一緒に使用すると、ダウンロードしたファイルに内容が16進数で表示されるようになります。
最初は、サーバーにはいくつかのフォントがないと考えられましたが、サーバー上にあるフォントは同じ動作をしています。 TXTファイルでも同じことが起こります。
byte[] wordDoc = createApptLetter();
HttpServletResponse response = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
response.setContentType("application/msword");
fileName = letter.getFileName();
response.addHeader("Content-disposition", "attachment; filename=\"" + fileName + "\"");
response.setContentLength(wordDoc.length);
OutputStream os = response.getOutputStream();
//log.error(response.getContentType());
os.write(wordDoc);
os.flush();
os.close();
facesContext.renderResponse();
facesContext.responseComplete();
編集:ここcreateApptLetter方法である:
private byte[] createApptLetter() {
LetterTemplate template = appointmentHome.getInstance().getLetterTemplate();
Client client = appointmentHome.getInstance().getClientRegistration().getEligibilityCycle().getClient();
String sageClinic = appointmentHome.getInstance().getFacility().getName();
String apptDate = appointmentHome.getInstance().getAppointmentDateString();
String apptTime = appointmentHome.getInstance().getAppointmentTimeString();
String notes = appointmentHome.getInstance().getAppointmentNotes();
String longDateFormat = SageConstantsEnum.DateFormats.LONGDATEFORMAT.getDescription();
SimpleDateFormat df = new SimpleDateFormat(longDateFormat);
String today = df.format(new Date());
//StringBuilder sbTemplate = new StringBuilder(new String(template.getLetterTemplateText()));
String xmlTemplate = new String (template.getLetterTemplateText());
xmlTemplate = xmlTemplate.replace("letterDate", today);
xmlTemplate = xmlTemplate.replace("apptDate", apptDate);
xmlTemplate = xmlTemplate.replace("apptTime", apptTime);
xmlTemplate = xmlTemplate.replace("apptNotes", notes);
xmlTemplate = xmlTemplate.replace("sageClinic", sageClinic);
xmlTemplate = xmlTemplate.replace("clientName", client.getFullname());
xmlTemplate = xmlTemplate.replace("clientCity",client.getMailingAddress().getAddress().getCity());
xmlTemplate = xmlTemplate.replace("clientAddress", client.getMailingAddress().getAddress().getStreetaddress());
xmlTemplate = xmlTemplate.replace("clientState",client.getMailingAddress().getAddress().getState());
xmlTemplate = xmlTemplate.replace("clientZip", client.getMailingAddress().getAddress().getZipcode());
return xmlTemplate.getBytes();
}
ご返信ありがとうございます。それをapplication/octet-streamに変更しました。まだ16進数で表示されています – mcgyver5
@ mcgyver5 'createApptLetter'関数は何をしますか?ダウンロード機能の完全なコードを表示できますか? –
ok。 createApptLetterメソッドを含めるように編集した質問。あなたが見ることができるように、それは単純な文字列置換である。そして、私が言ったように、これは窓の上で走っている風船でうまくいきます。私はそれがjdbcドライバの問題であるという理論を持っています。 – mcgyver5