aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Beeker <kiwiwings@apache.org>2017-01-01 00:56:51 +0000
committerAndreas Beeker <kiwiwings@apache.org>2017-01-01 00:56:51 +0000
commitf748e5087c180e58905f0d3f68d4774fab8d663b (patch)
treecd6c1a6a0369bfd571ce0b1173c7fccd67718f11
parent14c98d456ab50f94f39c8d3cf0d32ae870d086c8 (diff)
downloadpoi-f748e5087c180e58905f0d3f68d4774fab8d663b.tar.gz
poi-f748e5087c180e58905f0d3f68d4774fab8d663b.zip
fix content-type handling in *SSF-EmbeddedExtractor
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1776823 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/ooxml/java/org/apache/poi/ss/extractor/EmbeddedExtractor.java10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/ooxml/java/org/apache/poi/ss/extractor/EmbeddedExtractor.java b/src/ooxml/java/org/apache/poi/ss/extractor/EmbeddedExtractor.java
index a06566b54c..8f63d5098f 100644
--- a/src/ooxml/java/org/apache/poi/ss/extractor/EmbeddedExtractor.java
+++ b/src/ooxml/java/org/apache/poi/ss/extractor/EmbeddedExtractor.java
@@ -45,6 +45,7 @@ import org.apache.poi.util.IOUtils;
import org.apache.poi.util.LocaleUtil;
import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger;
+import org.apache.poi.xssf.usermodel.XSSFObjectData;
public class EmbeddedExtractor implements Iterable<EmbeddedExtractor> {
private static final POILogger LOG = POILogFactory.getLogger(EmbeddedExtractor.class);
@@ -97,7 +98,11 @@ public class EmbeddedExtractor implements Iterable<EmbeddedExtractor> {
if (od.hasDirectoryEntry()) {
data = extractOne((DirectoryNode)od.getDirectory());
} else {
- data = new EmbeddedData(od.getFileName(), od.getObjectData(), "binary/octet-stream");
+ String contentType = "binary/octet-stream";
+ if (od instanceof XSSFObjectData) {
+ contentType = ((XSSFObjectData)od).getObjectPart().getContentType();
+ }
+ data = new EmbeddedData(od.getFileName(), od.getObjectData(), contentType);
}
} catch (Exception e) {
LOG.log(POILogger.WARN, "Entry not found / readable - ignoring OLE embedding", e);
@@ -169,6 +174,7 @@ public class EmbeddedExtractor implements Iterable<EmbeddedExtractor> {
@Override
public EmbeddedData extract(DirectoryNode dn) throws IOException {
try {
+ // TODO: inspect the CompObj record for more details, i.e. the content type
Ole10Native ole10 = Ole10Native.createFromEmbeddedOleObject(dn);
return new EmbeddedData(ole10.getFileName(), ole10.getDataBuffer(), "binary/octet-stream");
} catch (Ole10NativeException e) {
@@ -254,6 +260,7 @@ public class EmbeddedExtractor implements Iterable<EmbeddedExtractor> {
public EmbeddedData extract(DirectoryNode dn) throws IOException {
EmbeddedData ed = super.extract(dn);
ed.setFilename(dn.getName()+".doc");
+ ed.setContentType("application/msword");
return ed;
}
}
@@ -271,6 +278,7 @@ public class EmbeddedExtractor implements Iterable<EmbeddedExtractor> {
public EmbeddedData extract(DirectoryNode dn) throws IOException {
EmbeddedData ed = super.extract(dn);
ed.setFilename(dn.getName()+".xls");
+ ed.setContentType("application/vnd.ms-excel");
return ed;
}
}