简体   繁体   English

在Oracle 10g中使用Java 1.4将docx文件写入BLOB

[英]Writing a docx file to a BLOB using Java 1.4 inside Oracle 10g

I'm trying to generate a blank docx file using Java, add some text, then write it to a BLOB that I can return to our document processing engine (a custom mess of PL/SQL and Java). 我试图使用Java生成空白的docx文件,添加一些文本,然后将其写入BLOB,然后我可以将其返回到我们的文档处理引擎(PL / SQL和Java的自定义混乱)。 I have to use the 1.4 JVM inside Oracle 10g, so no Java 1.5 stuff. 我必须在Oracle 10g中使用1.4 JVM,所以没有Java 1.5的东西。 I don't have a problem writing the docx to a file on my local machine, but when I try to write to BLOB, I'm getting garbage. 在将docx写入本地计算机上的文件时,我没有问题,但是当我尝试写入BLOB时,就会遇到垃圾。 Am I doing something dumb? 我在做蠢事吗? Any help is appreciated. 任何帮助表示赞赏。 Note in the code below, all the get[name]Xml() methods return an org.w3c.dom.Document. 注意,在下面的代码中,所有的get [name] Xml()方法都返回一个org.w3c.dom.Document。

public void save(String fileName) throws Exception {
    ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(fileName));
    addEntry(zos, getDocumentXml(), "word/document.xml");
    addEntry(zos, getContentTypesXml(), "[Content_Types].xml");
    addEntry(zos, getRelsXml(), "_rels/.rels");
    zos.flush();
    zos.close();
}

public java.sql.BLOB save() throws Exception {
    java.sql.Connection conn = DbUtilities.openConnection();
    BLOB outBlob = BLOB.createTemporary(conn, true, BLOB.DURATION_SESSION);
    outBlob.open(BLOB.MODE_READWRITE);
    ZipOutputStream zos = new ZipOutputStream(outBlob.setBinaryStream(0L));
    addEntry(zos, getDocumentXml(), "word/document.xml");
    addEntry(zos, getContentTypesXml(), "[Content_Types].xml");
    addEntry(zos, getRelsXml(), "_rels/.rels");
    zos.flush();
    zos.close();
    return outBlob;
}

private void addEntry(ZipOutputStream zos, Document doc, String fileName) throws Exception {
    Transformer t = TransformerFactory.newInstance().newTransformer();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    t.transform(new DOMSource(doc), new StreamResult(baos));
    ZipEntry ze = new ZipEntry(fileName);
    byte[] data = baos.toByteArray();
    ze.setSize(data.length);
    zos.putNextEntry(ze);
    zos.write(data);
    zos.flush();
    zos.closeEntry();
}

It looks like the problem was in our document processing engine. 看来问题出在我们的文档处理引擎中。 It was expecting a zipped docx. 它期待一个压缩的docx。 Glad we document our code well. 很高兴我们很好地记录了我们的代码。

Anyway, thanks to everyone who looked at my problem. 无论如何,感谢所有关注我的问题的人。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM