2010-03-10 7 views
2

J'essaye de générer un fichier docx vide en utilisant Java, d'ajouter du texte, puis de l'écrire dans un BLOB que je peux retourner à notre moteur de traitement de document (un mess personnalisé de PL/SQL et Java). Je dois utiliser le 1.4 JVM dans Oracle 10g, donc pas de choses Java 1.5. Je n'ai pas de problème pour écrire le fichier docx dans un fichier sur mon ordinateur local, mais lorsque j'essaie d'écrire sur BLOB, je reçois des données parasites. Est-ce que je fais quelque chose de stupide? Toute aide est appréciée. Notez dans le code ci-dessous, toutes les méthodes get [name] Xml() retournent un org.w3c.dom.Document.Ecriture d'un fichier docx dans un BLOB en utilisant Java 1.4 dans Oracle 10g

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(); 
} 
+0

Avez-vous essayé d'ajouter du contenu à docx, puis de l'enregistrer en tant que BLOB? Peut-être qu'il y a quelque chose d'amusant avec la sauvegarde des fichiers vierges dans la base de données – gmoore

Répondre

0

Il semble que le problème était dans notre moteur de traitement de document. Il attendait un docx zippé. Content que nous documentions bien notre code.

En tout cas, merci à tous ceux qui ont regardé mon problème.

Questions connexes