]> source.dussan.org Git - poi.git/commitdiff
ExtractorFactory: save OOXML stream into temporary file before text extraction -...
authorMaxim Valyanskiy <maxcom@apache.org>
Thu, 14 Jan 2010 08:56:35 +0000 (08:56 +0000)
committerMaxim Valyanskiy <maxcom@apache.org>
Thu, 14 Jan 2010 08:56:35 +0000 (08:56 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@899123 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java

index 24a2632be682630d1df38089494df588e3b39a33..394313cdca431f0d991256ad5513487bc95765ee 100644 (file)
 ==================================================================== */
 package org.apache.poi.extractor;
 
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PushbackInputStream;
+import java.io.*;
 import java.util.ArrayList;
 import java.util.Iterator;
 
@@ -30,6 +24,8 @@ import org.apache.poi.POIOLE2TextExtractor;
 import org.apache.poi.POITextExtractor;
 import org.apache.poi.POIXMLDocument;
 import org.apache.poi.POIXMLTextExtractor;
+import org.apache.poi.util.TempFile;
+import org.apache.poi.util.IOUtils;
 import org.apache.poi.hdgf.extractor.VisioTextExtractor;
 import org.apache.poi.hpbf.extractor.PublisherTextExtractor;
 import org.apache.poi.hslf.extractor.PowerPointExtractor;
@@ -87,9 +83,22 @@ public class ExtractorFactory {
                if(POIFSFileSystem.hasPOIFSHeader(inp)) {
                        return createExtractor(new POIFSFileSystem(inp));
                }
+
                if(POIXMLDocument.hasOOXMLHeader(inp)) {
-                       return createExtractor(OPCPackage.open(inp));
-               }
+            File file = TempFile.createTempFile("poi-ooxml-", ".tmp");
+
+            try {
+                FileOutputStream out = new FileOutputStream(file);
+                IOUtils.copy(inp, out);
+                out.close();
+
+                return createExtractor(OPCPackage.open(file.getPath()));
+            } finally {
+                if (file.exists()) {
+                    file.delete();
+                }
+            }
+        }
                throw new IllegalArgumentException("Your InputStream was neither an OLE2 stream, nor an OOXML stream");
        }