Galera, tenho um código que grava e recupera arquivos .doc de um campo BLOB no oracle. Porém com docx ele grava e não recupera. A caixa de texto abre com um arquivo extensão .do (do struts).
Fiz um teste aqui, converti o mimetype do .docx para .zip, durante a gravação. Assim o sistema recupera um .zip, só tenho o trabalho de converte-lo novamente para .docx na mão.
Achei uns códigos na net para converter o .docx e salvar em formato zip, mas não dão certo.
ByteArrayOutputStream baos = null;
byte[] buf = new byte[4000];
InputStream inputStream = null;
try {
if (this.getRefDoc() != null) {
baos = new ByteArrayOutputStream();
inputStream = this.getRefDoc().getBinaryStream();
int dataSize = 0;
while ((dataSize = inputStream.read(buf)) > 0) {
baos.write(buf, 0, dataSize);
}
baos.flush();
refDocByteArray = baos.toByteArray();
}
} catch (SQLException e) {
Código da net, mas dá erro …
ByteArrayOutputStream baos = null;
byte[] buf = new byte[4000];
InputStream inputStream = null;
try {
if (this.getRefDoc() != null) {
baos = new ByteArrayOutputStream();
inputStream = this.getRefDoc().getBinaryStream();
Transformer t = TransformerFactory.newInstance().newTransformer();
ByteArrayInputStream bais = new ByteArrayInputStream(inputStream.toString().getBytes());
DocumentBuilderFactory docBuilderFac = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFac.newDocumentBuilder();
[color=red]Document document = docBuilder.parse(inputStream);[/color]
t.transform(new DOMSource(document), new StreamResult(baos));
ZipEntry ze = new ZipEntry(title);
buf = baos.toByteArray();
ze.setSize(buf.length);
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(title));
zos.putNextEntry(ze);
zos.write(buf);
zos.flush();
zos.closeEntry();
refDocByteArray = baos.toByteArray();
}
} catch (SQLException e) {
[12/15/10 22:40:41:546 PKT] 00000033 SystemErr R [Fatal Error] :1:1: Content is not allowed in prolog.
[12/15/10 22:40:46:466 PKT] 00000033 SystemOut O (BNK) 0 [WebContainer : 0] ERROR com.citco.banking.nxg.cbfn.domain.CbfnNews.toByteArrayZip(CbfnNews.java:226) - Exception Occurred
org.xml.sax.SAXParseException: Content is not allowed in prolog.
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at com.citco.banking.nxg.cbfn.domain.CbfnNews.toByteArrayZip(CbfnNews.java:202)