From 1d2810f78d0a7214c0badd47769cf5107e1b3f41 Mon Sep 17 00:00:00 2001 From: Josef Rokos Date: Mon, 23 Feb 2015 22:21:25 +0100 Subject: [PATCH] =?UTF-8?q?Obsah=20p=C5=99ilo=C5=BEen=C3=BDch=20dokument?= =?UTF-8?q?=C5=AF=20ve=20form=C3=A1tech=20ODF=20-=20OpenOffice,=20openxml?= =?UTF-8?q?=20-=20MS=20Office=20a=20PDF=20se=20extrahuje=20do=20=C4=8Dist?= =?UTF-8?q?=C3=A9ho=20textu=20a=20indexuje=20pro=20fulltextov=C3=A9=20vyhl?= =?UTF-8?q?ed=C3=A1v=C3=A1n=C3=AD.=20closes=20#211?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 15 +- .../info/bukova/isspst/AppInitListener.java | 14 +- .../java/info/bukova/isspst/Constants.java | 2 +- .../info/bukova/isspst/data/FileContent.java | 97 ++ .../info/bukova/isspst/data/FileMetainfo.java | 58 +- .../services/fulltext/AbstractExtractor.java | 14 + .../fulltext/AbstractOfficeExtractor.java | 25 + .../services/fulltext/ExcelExtractor.java | 19 + .../isspst/services/fulltext/Extractor.java | 30 + .../services/fulltext/ExtractorException.java | 16 + .../services/fulltext/ExtractorFactory.java | 42 + .../{ => fulltext}/FullTextService.java | 6 +- .../{ => fulltext}/FullTextServiceImpl.java | 3 +- .../services/fulltext/OdfExtractor.java | 24 + .../services/fulltext/PdfExtractor.java | 32 + .../fulltext/PowerPointExtractor.java | 20 + .../services/fulltext/WordExtractor.java | 19 + .../storage/DocumentFileStorageImpl.java | 16 +- .../info/bukova/isspst/storage/MimeTypes.java | 4 +- .../bukova/isspst/ui/search/SearchForm.java | 7 +- src/main/resources/hibernate.cfg.xml | 1 + src/main/resources/mime.types.properties | 1351 +++++++++++++++++ .../webapp/WEB-INF/spring/root-context.xml | 6 +- 23 files changed, 1776 insertions(+), 45 deletions(-) create mode 100644 src/main/java/info/bukova/isspst/data/FileContent.java create mode 100644 src/main/java/info/bukova/isspst/services/fulltext/AbstractExtractor.java create mode 100644 src/main/java/info/bukova/isspst/services/fulltext/AbstractOfficeExtractor.java create mode 100644 src/main/java/info/bukova/isspst/services/fulltext/ExcelExtractor.java create mode 100644 src/main/java/info/bukova/isspst/services/fulltext/Extractor.java create mode 100644 src/main/java/info/bukova/isspst/services/fulltext/ExtractorException.java create mode 100644 src/main/java/info/bukova/isspst/services/fulltext/ExtractorFactory.java rename src/main/java/info/bukova/isspst/services/{ => fulltext}/FullTextService.java (95%) rename src/main/java/info/bukova/isspst/services/{ => fulltext}/FullTextServiceImpl.java (97%) create mode 100644 src/main/java/info/bukova/isspst/services/fulltext/OdfExtractor.java create mode 100644 src/main/java/info/bukova/isspst/services/fulltext/PdfExtractor.java create mode 100644 src/main/java/info/bukova/isspst/services/fulltext/PowerPointExtractor.java create mode 100644 src/main/java/info/bukova/isspst/services/fulltext/WordExtractor.java create mode 100644 src/main/resources/mime.types.properties diff --git a/pom.xml b/pom.xml index 3a78e29c..4038947e 100644 --- a/pom.xml +++ b/pom.xml @@ -348,7 +348,20 @@ joda-time 2.4 - + + + + org.apache.odftoolkit + simple-odf + 0.7-incubating + + + + org.apache.poi + poi-ooxml + 3.11 + + junit diff --git a/src/main/java/info/bukova/isspst/AppInitListener.java b/src/main/java/info/bukova/isspst/AppInitListener.java index c1155426..1314cd04 100644 --- a/src/main/java/info/bukova/isspst/AppInitListener.java +++ b/src/main/java/info/bukova/isspst/AppInitListener.java @@ -11,8 +11,8 @@ import info.bukova.isspst.data.User; import info.bukova.isspst.reporting.Report; import info.bukova.isspst.reporting.ReportMapping; import info.bukova.isspst.reporting.ReportType; -import info.bukova.isspst.services.FullTextService; import info.bukova.isspst.services.dbinfo.DbInfoService; +import info.bukova.isspst.services.fulltext.FullTextService; import info.bukova.isspst.services.munits.MUnitService; import info.bukova.isspst.services.numberseries.NumberSeriesService; import info.bukova.isspst.services.requirement.RequirementTypeService; @@ -20,19 +20,17 @@ import info.bukova.isspst.services.settings.GlobalSettingsService; import info.bukova.isspst.services.users.PermissionService; import info.bukova.isspst.services.users.RoleService; import info.bukova.isspst.services.users.UserService; - -import java.math.BigDecimal; -import java.util.List; - -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; +import java.math.BigDecimal; +import java.util.List; + public class AppInitListener implements ServletContextListener { diff --git a/src/main/java/info/bukova/isspst/Constants.java b/src/main/java/info/bukova/isspst/Constants.java index 0645cce3..b802a111 100644 --- a/src/main/java/info/bukova/isspst/Constants.java +++ b/src/main/java/info/bukova/isspst/Constants.java @@ -10,7 +10,7 @@ import info.bukova.isspst.data.TripBill; import info.bukova.isspst.data.TripRequirement; import info.bukova.isspst.reporting.Report; import info.bukova.isspst.reporting.ReportMapping; -import info.bukova.isspst.services.FullTextService; +import info.bukova.isspst.services.fulltext.FullTextService; import info.bukova.isspst.services.addressbook.AdbService; import info.bukova.isspst.services.buildings.BuildingService; import info.bukova.isspst.services.invoicing.InvoicingService; diff --git a/src/main/java/info/bukova/isspst/data/FileContent.java b/src/main/java/info/bukova/isspst/data/FileContent.java new file mode 100644 index 00000000..f2aeaf73 --- /dev/null +++ b/src/main/java/info/bukova/isspst/data/FileContent.java @@ -0,0 +1,97 @@ +package info.bukova.isspst.data; + +import org.hibernate.annotations.Type; +import org.hibernate.search.annotations.Analyze; +import org.hibernate.search.annotations.Field; +import org.hibernate.search.annotations.Index; +import org.hibernate.search.annotations.Indexed; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * @author Pepa Rokos + */ +@Entity +@Table(name = "FILE_CONTENTS") +@Indexed +public class FileContent { + + @Id + @Column(name = "ID") + @GeneratedValue + private int id; + + @Column(name = "CONTENT") + @Type(type = "text") + @Field(index = Index.YES, analyze = Analyze.YES) + private String plainText; + + @Column(name = "CONTENT_TYPE") + private String contentType; + + @Column(name = "PATH_IN_FILESYSTEM") + private String pathInFilesystem; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getPlainText() { + return plainText; + + } + + public void setPlainText(String content) { + this.plainText = content; + } + + public String getContentType() { + return contentType; + } + + public void setContentType(String contentType) { + this.contentType = contentType; + } + + public String getPathInFilesystem() { + return pathInFilesystem; + } + + public void setPathInFilesystem(String pathInFilesystem) { + this.pathInFilesystem = pathInFilesystem; + } + + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof FileContent)) return false; + + FileContent that = (FileContent) o; + + if (id != that.id) return false; + if (plainText != null ? !plainText.equals(that.plainText) : that.plainText != null) return false; + if (contentType != null ? !contentType.equals(that.contentType) : that.contentType != null) return false; + if (pathInFilesystem != null ? !pathInFilesystem.equals(that.pathInFilesystem) : that.pathInFilesystem != null) + return false; + + return true; + } + + @Override + public int hashCode() { + int result = id; + result = 31 * result + (plainText != null ? plainText.hashCode() : 0); + result = 31 * result + (contentType != null ? contentType.hashCode() : 0); + result = 31 * result + (pathInFilesystem != null ? pathInFilesystem.hashCode() : 0); + return result; + } +} diff --git a/src/main/java/info/bukova/isspst/data/FileMetainfo.java b/src/main/java/info/bukova/isspst/data/FileMetainfo.java index f04484ff..c2697eef 100644 --- a/src/main/java/info/bukova/isspst/data/FileMetainfo.java +++ b/src/main/java/info/bukova/isspst/data/FileMetainfo.java @@ -1,13 +1,17 @@ package info.bukova.isspst.data; -import org.hibernate.annotations.Type; import org.hibernate.search.annotations.Analyze; import org.hibernate.search.annotations.Field; import org.hibernate.search.annotations.Index; import org.hibernate.search.annotations.Indexed; +import org.hibernate.search.annotations.IndexedEmbedded; +import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; import javax.persistence.Table; @Entity @@ -16,23 +20,32 @@ import javax.persistence.Table; public class FileMetainfo extends BaseData { @Column(name = "FILE_NAME") + @Field(index = Index.YES, analyze = Analyze.YES) private String fileName; - @Column(name = "PATH_IN_FILESYSTEM") - private String pathInFilesystem; + @Column(name = "MODULE_ID") private String moduleId; + @Column(name = "RECORD_ID") private int recordId; - @Column(name = "CONTENT") - @Type(type = "text") - @Field(index = Index.YES, analyze = Analyze.YES) - private String content; + + @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) + @JoinColumn(name = "CONTENT_ID") + @IndexedEmbedded + private FileContent content; + @Column(name = "MD5") private String md5; + @Column(name = "DESCRIPTION") + @Field(index = Index.YES, analyze = Analyze.YES) private String description; - @Column(name = "CONTENT_TYPE") - private String contentType; + + private void ensureContentExists() { + if (content == null) { + content = new FileContent(); + } + } public String getFileName() { return fileName; @@ -43,11 +56,15 @@ public class FileMetainfo extends BaseData { } public String getPathInFilesystem() { - return pathInFilesystem; + if (content != null) { + return content.getPathInFilesystem(); + } + return null; } public void setPathInFilesystem(String pathInFilesystem) { - this.pathInFilesystem = pathInFilesystem; + ensureContentExists(); + content.setPathInFilesystem(pathInFilesystem); } public String getModuleId() { @@ -66,11 +83,11 @@ public class FileMetainfo extends BaseData { this.recordId = recordId; } - public String getContent() { + public FileContent getContent() { return content; } - public void setContent(String content) { + public void setContent(FileContent content) { this.content = content; } @@ -91,11 +108,16 @@ public class FileMetainfo extends BaseData { } public String getContentType() { - return contentType; + if (content != null) { + return content.getContentType(); + } + + return null; } public void setContentType(String contentType) { - this.contentType = contentType; + ensureContentExists(); + content.setContentType(contentType); } @Override @@ -105,16 +127,12 @@ public class FileMetainfo extends BaseData { FileMetainfo that = (FileMetainfo) o; - if (getId() != 0 && getId() != that.getId()) return false; if (recordId != that.recordId) return false; if (content != null ? !content.equals(that.content) : that.content != null) return false; - if (contentType != null ? !contentType.equals(that.contentType) : that.contentType != null) return false; if (description != null ? !description.equals(that.description) : that.description != null) return false; if (fileName != null ? !fileName.equals(that.fileName) : that.fileName != null) return false; if (md5 != null ? !md5.equals(that.md5) : that.md5 != null) return false; if (moduleId != null ? !moduleId.equals(that.moduleId) : that.moduleId != null) return false; - if (pathInFilesystem != null ? !pathInFilesystem.equals(that.pathInFilesystem) : that.pathInFilesystem != null) - return false; return true; } @@ -122,13 +140,11 @@ public class FileMetainfo extends BaseData { @Override public int hashCode() { int result = fileName != null ? fileName.hashCode() : 0; - result = 31 * result + (pathInFilesystem != null ? pathInFilesystem.hashCode() : 0); result = 31 * result + (moduleId != null ? moduleId.hashCode() : 0); result = 31 * result + recordId; result = 31 * result + (content != null ? content.hashCode() : 0); result = 31 * result + (md5 != null ? md5.hashCode() : 0); result = 31 * result + (description != null ? description.hashCode() : 0); - result = 31 * result + (contentType != null ? contentType.hashCode() : 0); return result; } } diff --git a/src/main/java/info/bukova/isspst/services/fulltext/AbstractExtractor.java b/src/main/java/info/bukova/isspst/services/fulltext/AbstractExtractor.java new file mode 100644 index 00000000..eb03f3f9 --- /dev/null +++ b/src/main/java/info/bukova/isspst/services/fulltext/AbstractExtractor.java @@ -0,0 +1,14 @@ +package info.bukova.isspst.services.fulltext; + +import java.io.ByteArrayInputStream; + +/** + * @author Pepa Rokos + */ +public abstract class AbstractExtractor implements Extractor { + + public String extract(byte[] data) { + return extract(new ByteArrayInputStream(data)); + } + +} diff --git a/src/main/java/info/bukova/isspst/services/fulltext/AbstractOfficeExtractor.java b/src/main/java/info/bukova/isspst/services/fulltext/AbstractOfficeExtractor.java new file mode 100644 index 00000000..08f91464 --- /dev/null +++ b/src/main/java/info/bukova/isspst/services/fulltext/AbstractOfficeExtractor.java @@ -0,0 +1,25 @@ +package info.bukova.isspst.services.fulltext; + +import org.apache.poi.POIXMLTextExtractor; + +import java.io.IOException; +import java.io.InputStream; + +/** + * @author Pepa Rokos + */ +public abstract class AbstractOfficeExtractor extends AbstractExtractor { + + @Override + public String extract(InputStream is) throws ExtractorException { + try { + POIXMLTextExtractor extractor = createExtractor(is); + return extractor.getText(); + } catch (IOException e) { + throw new ExtractorException(e); + } + } + + protected abstract POIXMLTextExtractor createExtractor(InputStream is) throws IOException; + +} diff --git a/src/main/java/info/bukova/isspst/services/fulltext/ExcelExtractor.java b/src/main/java/info/bukova/isspst/services/fulltext/ExcelExtractor.java new file mode 100644 index 00000000..281bc5f7 --- /dev/null +++ b/src/main/java/info/bukova/isspst/services/fulltext/ExcelExtractor.java @@ -0,0 +1,19 @@ +package info.bukova.isspst.services.fulltext; + +import org.apache.poi.POIXMLTextExtractor; +import org.apache.poi.xssf.extractor.XSSFExcelExtractor; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.IOException; +import java.io.InputStream; + +/** + * @author Pepa Rokos + */ +public class ExcelExtractor extends AbstractOfficeExtractor implements Extractor { + + @Override + protected POIXMLTextExtractor createExtractor(InputStream is) throws IOException { + return new XSSFExcelExtractor(new XSSFWorkbook(is)); + } +} diff --git a/src/main/java/info/bukova/isspst/services/fulltext/Extractor.java b/src/main/java/info/bukova/isspst/services/fulltext/Extractor.java new file mode 100644 index 00000000..8dd0a458 --- /dev/null +++ b/src/main/java/info/bukova/isspst/services/fulltext/Extractor.java @@ -0,0 +1,30 @@ +package info.bukova.isspst.services.fulltext; + +import java.io.InputStream; + +/** + * @author Pepa Rokos + * + * Rozhraní extractoru čistého textu z formátů Office a PDF + */ +public interface Extractor { + + /** + * Extrahuje text z předaného pole bytů + * + * @param data zdrajová data + * @return čistý text + * @throws ExtractorException + */ + public String extract(byte[] data) throws ExtractorException; + + /** + * Extrahuje text z předaného InputStream objektu + * + * @param is zdrojový InputStream + * @return čistý text + * @throws ExtractorException + */ + public String extract(InputStream is) throws ExtractorException; + +} diff --git a/src/main/java/info/bukova/isspst/services/fulltext/ExtractorException.java b/src/main/java/info/bukova/isspst/services/fulltext/ExtractorException.java new file mode 100644 index 00000000..0ce846ea --- /dev/null +++ b/src/main/java/info/bukova/isspst/services/fulltext/ExtractorException.java @@ -0,0 +1,16 @@ +package info.bukova.isspst.services.fulltext; + +import info.bukova.isspst.services.IsspstException; + +/** + * @author Pepa Rokos + * + * Výjimka extrakce textu + */ +public class ExtractorException extends IsspstException { + + public ExtractorException(Throwable cause) { + super("Extractor exception: ", cause); + } + +} diff --git a/src/main/java/info/bukova/isspst/services/fulltext/ExtractorFactory.java b/src/main/java/info/bukova/isspst/services/fulltext/ExtractorFactory.java new file mode 100644 index 00000000..3f37269a --- /dev/null +++ b/src/main/java/info/bukova/isspst/services/fulltext/ExtractorFactory.java @@ -0,0 +1,42 @@ +package info.bukova.isspst.services.fulltext; + +/** + * @author Pepa Rokos + * + * Factory pro konkrétní extractor + */ +public class ExtractorFactory { + + /** + * Vytvoří extractor podle předaného content typu + * + * @param contentType + * @return Extractor + */ + public static Extractor createExtractor(String contentType) { + if (contentType.equals("application/vnd.oasis.opendocument.text") + || contentType.equals("application/vnd.oasis.opendocument.spreadsheet") + || contentType.equals("application/vnd.oasis.opendocument.presentation")) { + return new OdfExtractor(); + } + + if (contentType.equals("application/vnd.openxmlformats-officedocument.wordprocessingml.document")) { + return new WordExtractor(); + } + + if (contentType.equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")) { + return new ExcelExtractor(); + } + + if (contentType.equals("application/vnd.openxmlformats-officedocument.presentationml.slideshow")) { + return new PowerPointExtractor(); + } + + if (contentType.equals("application/pdf")) { + return new PdfExtractor(); + } + + return null; + } + +} diff --git a/src/main/java/info/bukova/isspst/services/FullTextService.java b/src/main/java/info/bukova/isspst/services/fulltext/FullTextService.java similarity index 95% rename from src/main/java/info/bukova/isspst/services/FullTextService.java rename to src/main/java/info/bukova/isspst/services/fulltext/FullTextService.java index 7217663b..f1fa4aa8 100644 --- a/src/main/java/info/bukova/isspst/services/FullTextService.java +++ b/src/main/java/info/bukova/isspst/services/fulltext/FullTextService.java @@ -1,10 +1,10 @@ -package info.bukova.isspst.services; - -import java.util.List; +package info.bukova.isspst.services.fulltext; import org.hibernate.search.annotations.Field; import org.hibernate.search.annotations.Indexed; +import java.util.List; + /** * @author Pepa Rokos * diff --git a/src/main/java/info/bukova/isspst/services/FullTextServiceImpl.java b/src/main/java/info/bukova/isspst/services/fulltext/FullTextServiceImpl.java similarity index 97% rename from src/main/java/info/bukova/isspst/services/FullTextServiceImpl.java rename to src/main/java/info/bukova/isspst/services/fulltext/FullTextServiceImpl.java index c2583459..518a32a0 100644 --- a/src/main/java/info/bukova/isspst/services/FullTextServiceImpl.java +++ b/src/main/java/info/bukova/isspst/services/fulltext/FullTextServiceImpl.java @@ -1,9 +1,10 @@ -package info.bukova.isspst.services; +package info.bukova.isspst.services.fulltext; import info.bukova.isspst.ModuleUtils; import info.bukova.isspst.dao.QueryDao; import info.bukova.isspst.data.BaseData; import info.bukova.isspst.data.User; +import info.bukova.isspst.services.ModuleNotActiveException; import info.bukova.isspst.sort.ReflectionTools; import org.apache.lucene.search.Query; import org.hibernate.Hibernate; diff --git a/src/main/java/info/bukova/isspst/services/fulltext/OdfExtractor.java b/src/main/java/info/bukova/isspst/services/fulltext/OdfExtractor.java new file mode 100644 index 00000000..b194fb97 --- /dev/null +++ b/src/main/java/info/bukova/isspst/services/fulltext/OdfExtractor.java @@ -0,0 +1,24 @@ +package info.bukova.isspst.services.fulltext; + +import org.odftoolkit.simple.Document; +import org.odftoolkit.simple.common.TextExtractor; + +import java.io.InputStream; + +/** + * @author Pepa Rokos + */ +public class OdfExtractor extends AbstractExtractor implements Extractor { + + @Override + public String extract(InputStream is) throws ExtractorException { + try { + Document odfDocument = Document.loadDocument(is); + TextExtractor extractor = TextExtractor.newOdfTextExtractor(odfDocument.getContentRoot()); + + return extractor.getText(); + } catch (Exception e) { + throw new ExtractorException(e); + } + } +} diff --git a/src/main/java/info/bukova/isspst/services/fulltext/PdfExtractor.java b/src/main/java/info/bukova/isspst/services/fulltext/PdfExtractor.java new file mode 100644 index 00000000..06712a65 --- /dev/null +++ b/src/main/java/info/bukova/isspst/services/fulltext/PdfExtractor.java @@ -0,0 +1,32 @@ +package info.bukova.isspst.services.fulltext; + +import com.lowagie.text.pdf.PdfReader; +import com.lowagie.text.pdf.parser.PdfTextExtractor; + +import java.io.IOException; +import java.io.InputStream; + +/** + * @author Pepa Rokos + */ +public class PdfExtractor extends AbstractExtractor implements Extractor { + + @Override + public String extract(InputStream is) throws ExtractorException { + try { + PdfReader reader = new PdfReader(is); + PdfTextExtractor extractor = new PdfTextExtractor(reader); + StringBuilder sb = new StringBuilder(); + + for (int i = 1; i <= reader.getNumberOfPages(); i++) { + sb.append(extractor.getTextFromPage(i)); + } + + return sb.toString(); + + } catch (IOException e) { + throw new ExtractorException(e); + } + } + +} diff --git a/src/main/java/info/bukova/isspst/services/fulltext/PowerPointExtractor.java b/src/main/java/info/bukova/isspst/services/fulltext/PowerPointExtractor.java new file mode 100644 index 00000000..87ee535c --- /dev/null +++ b/src/main/java/info/bukova/isspst/services/fulltext/PowerPointExtractor.java @@ -0,0 +1,20 @@ +package info.bukova.isspst.services.fulltext; + +import org.apache.poi.POIXMLTextExtractor; +import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor; +import org.apache.poi.xslf.usermodel.XMLSlideShow; + +import java.io.IOException; +import java.io.InputStream; + +/** + * @author Pepa Rokos + */ +public class PowerPointExtractor extends AbstractOfficeExtractor implements Extractor { + + @Override + protected POIXMLTextExtractor createExtractor(InputStream is) throws IOException { + return new XSLFPowerPointExtractor(new XMLSlideShow(is)); + } + +} diff --git a/src/main/java/info/bukova/isspst/services/fulltext/WordExtractor.java b/src/main/java/info/bukova/isspst/services/fulltext/WordExtractor.java new file mode 100644 index 00000000..eb58c544 --- /dev/null +++ b/src/main/java/info/bukova/isspst/services/fulltext/WordExtractor.java @@ -0,0 +1,19 @@ +package info.bukova.isspst.services.fulltext; + +import org.apache.poi.POIXMLTextExtractor; +import org.apache.poi.xwpf.extractor.XWPFWordExtractor; +import org.apache.poi.xwpf.usermodel.XWPFDocument; + +import java.io.IOException; +import java.io.InputStream; + +/** + * @author Pepa Rokos + */ +public class WordExtractor extends AbstractOfficeExtractor implements Extractor { + + @Override + protected POIXMLTextExtractor createExtractor(InputStream is) throws IOException { + return new XWPFWordExtractor(new XWPFDocument(is)); + } +} diff --git a/src/main/java/info/bukova/isspst/storage/DocumentFileStorageImpl.java b/src/main/java/info/bukova/isspst/storage/DocumentFileStorageImpl.java index 7a6a9387..91e5d08c 100644 --- a/src/main/java/info/bukova/isspst/storage/DocumentFileStorageImpl.java +++ b/src/main/java/info/bukova/isspst/storage/DocumentFileStorageImpl.java @@ -2,6 +2,8 @@ package info.bukova.isspst.storage; import info.bukova.isspst.dao.QueryDao; import info.bukova.isspst.data.FileMetainfo; +import info.bukova.isspst.services.fulltext.Extractor; +import info.bukova.isspst.services.fulltext.ExtractorFactory; import org.apache.commons.codec.binary.Hex; import org.hibernate.Query; import org.springframework.beans.factory.annotation.Autowired; @@ -68,6 +70,15 @@ public class DocumentFileStorageImpl extends AbstractFileStorage i return fileName; } + private void extractContent(InputStream is, FileMetainfo fileID) { + Extractor extractor = ExtractorFactory.createExtractor(fileID.getContentType()); + + if (extractor != null) { + fileID.getContent().setPlainText(extractor.extract(is)); + } + + } + @Override @Transactional public void removeFile(FileMetainfo fileID) { @@ -126,6 +137,7 @@ public class DocumentFileStorageImpl extends AbstractFileStorage i if (!checkForDuplicate(new ByteArrayInputStream(data), metaInfo)) { saveFile(data, metaInfo); + extractContent(new ByteArrayInputStream(data), metaInfo); } return metaInfo; @@ -140,6 +152,7 @@ public class DocumentFileStorageImpl extends AbstractFileStorage i try { if (!checkForDuplicate(new FileInputStream(file), metaInfo)) { saveFile(file, metaInfo); + extractContent(new FileInputStream(file), metaInfo); } } catch (FileNotFoundException e) { //TODO: ošetřit @@ -192,9 +205,8 @@ public class DocumentFileStorageImpl extends AbstractFileStorage i if (!found.isEmpty()) { FileMetainfo foundInfo = found.get(0); - info.setPathInFilesystem(foundInfo.getPathInFilesystem()); info.setMd5(foundInfo.getMd5()); - info.setContentType(foundInfo.getContentType()); + info.setContent(foundInfo.getContent()); return true; } else { diff --git a/src/main/java/info/bukova/isspst/storage/MimeTypes.java b/src/main/java/info/bukova/isspst/storage/MimeTypes.java index 74fb2059..4bc272a7 100644 --- a/src/main/java/info/bukova/isspst/storage/MimeTypes.java +++ b/src/main/java/info/bukova/isspst/storage/MimeTypes.java @@ -231,7 +231,7 @@ public class MimeTypes { if (mimeTypes.size() == 0) { HashMap tempMap = new HashMap(); - InputStream is = MimeTypes.class.getResourceAsStream("mime.types.properties"); + InputStream is = MimeTypes.class.getResourceAsStream("/mime.types.properties"); try { Properties properties = new Properties(); @@ -248,6 +248,7 @@ public class MimeTypes { } catch (IOException e) { + //ToDo: ošetřit //Debug.error(e); } finally @@ -258,6 +259,7 @@ public class MimeTypes { } catch (IOException e) { + //ToDo: ošetřit //Debug.error(e); } } diff --git a/src/main/java/info/bukova/isspst/ui/search/SearchForm.java b/src/main/java/info/bukova/isspst/ui/search/SearchForm.java index 24b3ae64..eea266be 100644 --- a/src/main/java/info/bukova/isspst/ui/search/SearchForm.java +++ b/src/main/java/info/bukova/isspst/ui/search/SearchForm.java @@ -1,14 +1,13 @@ package info.bukova.isspst.ui.search; import info.bukova.isspst.UrlResolverHolder; -import info.bukova.isspst.services.FullTextService; - -import java.util.List; - +import info.bukova.isspst.services.fulltext.FullTextService; import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.NotifyChange; import org.zkoss.zk.ui.select.annotation.WireVariable; +import java.util.List; + public class SearchForm { @WireVariable diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml index 2e5d8952..95356639 100644 --- a/src/main/resources/hibernate.cfg.xml +++ b/src/main/resources/hibernate.cfg.xml @@ -34,5 +34,6 @@ + \ No newline at end of file diff --git a/src/main/resources/mime.types.properties b/src/main/resources/mime.types.properties new file mode 100644 index 00000000..96cf4ac6 --- /dev/null +++ b/src/main/resources/mime.types.properties @@ -0,0 +1,1351 @@ +# This file maps Internet media types to unique file extension(s). +# Although created for httpd, this file is used by many software systems +# and has been placed in the public domain for unlimited redisribution. +# +# The table below contains both registered and (common) unregistered types. +# A type that has no unique extension can be ignored -- they are listed +# here to guide configurations toward known types and to make it easier to +# identify "new" types. File extensions are also commonly used to indicate +# content languages and encodings, so choose them carefully. +# +# Internet media types should be registered as described in RFC 4288. +# The registry is at . +# +# MIME type=Extensions +# application/3gpp-ims+xml +# application/activemessage +application/andrew-inset=ez +# application/applefile +application/applixware=aw +application/atom+xml=atom +application/atomcat+xml=atomcat +# application/atomicmail +application/atomsvc+xml=atomsvc +# application/auth-policy+xml +# application/batch-smtp +# application/beep+xml +# application/cals-1840 +application/ccxml+xml=ccxml +# application/cea-2018+xml +# application/cellml+xml +# application/cnrp+xml +# application/commonground +# application/conference-info+xml +# application/cpl+xml +# application/csta+xml +# application/cstadata+xml +application/cu-seeme=cu +# application/cybercash +application/davmount+xml=davmount +# application/dca-rft +# application/dec-dx +# application/dialog-info+xml +# application/dicom +# application/dns +application/dssc+der=dssc +application/dssc+xml=xdssc +# application/dvcs +application/ecmascript=ecma +# application/edi-consent +# application/edi-x12 +# application/edifact +application/emma+xml=emma +# application/epp+xml +application/epub+zip=epub +# application/eshop +# application/example +# application/fastinfoset +# application/fastsoap +# application/fits +application/font-tdpfr=pfr +# application/h224 +# application/held+xml +# application/http +application/hyperstudio=stk +# application/ibe-key-request+xml +# application/ibe-pkg-reply+xml +# application/ibe-pp-data +# application/iges +# application/im-iscomposing+xml +# application/index +# application/index.cmd +# application/index.obj +# application/index.response +# application/index.vnd +# application/iotp +application/ipfix=ipfix +# application/ipp +# application/isup +application/java-archive=jar +application/java-serialized-object=ser +application/java-vm=class +#application/javascript=js +application/json=json +# application/kpml-request+xml +# application/kpml-response+xml +application/lost+xml=lostxml +application/mac-binhex40=hqx +application/mac-compactpro=cpt +# application/macwriteii +application/marc=mrc +application/mathematica=ma nb mb +application/mathml+xml=mathml +# application/mbms-associated-procedure-description+xml +# application/mbms-deregister+xml +# application/mbms-envelope+xml +# application/mbms-msk+xml +# application/mbms-msk-response+xml +# application/mbms-protection-description+xml +# application/mbms-reception-report+xml +# application/mbms-register+xml +# application/mbms-register-response+xml +# application/mbms-user-service-description+xml +application/mbox=mbox +# application/media_control+xml +application/mediaservercontrol+xml=mscml +# application/mikey +# application/moss-keys +# application/moss-signature +# application/mosskey-data +# application/mosskey-request +application/mp4=mp4s +# application/mpeg4-generic +# application/mpeg4-iod +# application/mpeg4-iod-xmt +application/msword=doc dot +application/mxf=mxf +# application/nasdata +# application/news-checkgroups +# application/news-groupinfo +# application/news-transmission +# application/nss +# application/ocsp-request +# application/ocsp-response +application/octet-stream=bin dms lha lrf lzh so iso dmg dist distz pkg bpk dump elc deploy +application/oda=oda +application/oebps-package+xml=opf +application/ogg=ogx +application/onenote=onetoc onetoc2 onetmp onepkg +# application/parityfec +application/patch-ops-error+xml=xer +application/pdf=pdf +application/pgp-encrypted=pgp +# application/pgp-keys +application/pgp-signature=asc sig +application/pics-rules=prf +# application/pidf+xml +# application/pidf-diff+xml +application/pkcs10=p10 +application/pkcs7-mime=p7m p7c +application/pkcs7-signature=p7s +application/pkix-cert=cer +application/pkix-crl=crl +application/pkix-pkipath=pkipath +application/pkixcmp=pki +application/pls+xml=pls +# application/poc-settings+xml +application/postscript=ai eps ps +# application/prs.alvestrand.titrax-sheet +application/prs.cww=cww +# application/prs.nprend +# application/prs.plucker +# application/qsig +application/rdf+xml=rdf +application/reginfo+xml=rif +application/relax-ng-compact-syntax=rnc +# application/remote-printing +application/resource-lists+xml=rl +application/resource-lists-diff+xml=rld +# application/riscos +# application/rlmi+xml +application/rls-services+xml=rs +application/rsd+xml=rsd +application/rss+xml=rss +application/rtf=rtf +# application/rtx +# application/samlassertion+xml +# application/samlmetadata+xml +application/sbml+xml=sbml +application/scvp-cv-request=scq +application/scvp-cv-response=scs +application/scvp-vp-request=spq +application/scvp-vp-response=spp +application/sdp=sdp +# application/set-payment +application/set-payment-initiation=setpay +# application/set-registration +application/set-registration-initiation=setreg +# application/sgml +# application/sgml-open-catalog +application/shf+xml=shf +# application/sieve +# application/simple-filter+xml +# application/simple-message-summary +# application/simplesymbolcontainer +# application/slate +# application/smil +application/smil+xml=smi smil +# application/soap+fastinfoset +# application/soap+xml +application/sparql-query=rq +application/sparql-results+xml=srx +# application/spirits-event+xml +application/srgs=gram +application/srgs+xml=grxml +application/ssml+xml=ssml +# application/timestamp-query +# application/timestamp-reply +# application/tve-trigger +# application/ulpfec +# application/vemmi +# application/vividence.scriptfile +# application/vnd.3gpp.bsf+xml +application/vnd.3gpp.pic-bw-large=plb +application/vnd.3gpp.pic-bw-small=psb +application/vnd.3gpp.pic-bw-var=pvb +# application/vnd.3gpp.sms +# application/vnd.3gpp2.bcmcsinfo+xml +# application/vnd.3gpp2.sms +application/vnd.3gpp2.tcap=tcap +application/vnd.3m.post-it-notes=pwn +application/vnd.accpac.simply.aso=aso +application/vnd.accpac.simply.imp=imp +application/vnd.acucobol=acu +application/vnd.acucorp=atc acutc +application/vnd.adobe.air-application-installer-package+zip=air +# application/vnd.adobe.partial-upload +application/vnd.adobe.xdp+xml=xdp +application/vnd.adobe.xfdf=xfdf +# application/vnd.aether.imp +application/vnd.airzip.filesecure.azf=azf +application/vnd.airzip.filesecure.azs=azs +application/vnd.amazon.ebook=azw +application/vnd.americandynamics.acc=acc +application/vnd.amiga.ami=ami +application/vnd.android.package-archive=apk +application/vnd.anser-web-certificate-issue-initiation=cii +application/vnd.anser-web-funds-transfer-initiation=fti +application/vnd.antix.game-component=atx +application/vnd.apple.installer+xml=mpkg +application/vnd.apple.mpegurl=m3u8 +# application/vnd.arastra.swi +application/vnd.aristanetworks.swi=swi +application/vnd.audiograph=aep +# application/vnd.autopackage +# application/vnd.avistar+xml +application/vnd.blueice.multipass=mpm +# application/vnd.bluetooth.ep.oob +application/vnd.bmi=bmi +application/vnd.businessobjects=rep +# application/vnd.cab-jscript +# application/vnd.canon-cpdl +# application/vnd.canon-lips +# application/vnd.cendio.thinlinc.clientconf +application/vnd.chemdraw+xml=cdxml +application/vnd.chipnuts.karaoke-mmd=mmd +application/vnd.cinderella=cdy +# application/vnd.cirpack.isdn-ext +application/vnd.claymore=cla +application/vnd.cloanto.rp9=rp9 +application/vnd.clonk.c4group=c4g c4d c4f c4p c4u +# application/vnd.commerce-battelle +application/vnd.commonspace=csp +application/vnd.contact.cmsg=cdbcmsg +application/vnd.cosmocaller=cmc +application/vnd.crick.clicker=clkx +application/vnd.crick.clicker.keyboard=clkk +application/vnd.crick.clicker.palette=clkp +application/vnd.crick.clicker.template=clkt +application/vnd.crick.clicker.wordbank=clkw +application/vnd.criticaltools.wbs+xml=wbs +application/vnd.ctc-posml=pml +# application/vnd.ctct.ws+xml +# application/vnd.cups-pdf +# application/vnd.cups-postscript +application/vnd.cups-ppd=ppd +# application/vnd.cups-raster +# application/vnd.cups-raw +application/vnd.curl.car=car +application/vnd.curl.pcurl=pcurl +# application/vnd.cybank +application/vnd.data-vision.rdz=rdz +application/vnd.denovo.fcselayout-link=fe_launch +# application/vnd.dir-bi.plate-dl-nosuffix +application/vnd.dna=dna +application/vnd.dolby.mlp=mlp +# application/vnd.dolby.mobile.1 +# application/vnd.dolby.mobile.2 +application/vnd.dpgraph=dpg +application/vnd.dreamfactory=dfac +# application/vnd.dvb.esgcontainer +# application/vnd.dvb.ipdcdftnotifaccess +# application/vnd.dvb.ipdcesgaccess +# application/vnd.dvb.ipdcroaming +# application/vnd.dvb.iptv.alfec-base +# application/vnd.dvb.iptv.alfec-enhancement +# application/vnd.dvb.notif-aggregate-root+xml +# application/vnd.dvb.notif-container+xml +# application/vnd.dvb.notif-generic+xml +# application/vnd.dvb.notif-ia-msglist+xml +# application/vnd.dvb.notif-ia-registration-request+xml +# application/vnd.dvb.notif-ia-registration-response+xml +# application/vnd.dvb.notif-init+xml +# application/vnd.dxr +application/vnd.dynageo=geo +# application/vnd.ecdis-update +application/vnd.ecowin.chart=mag +# application/vnd.ecowin.filerequest +# application/vnd.ecowin.fileupdate +# application/vnd.ecowin.series +# application/vnd.ecowin.seriesrequest +# application/vnd.ecowin.seriesupdate +# application/vnd.emclient.accessrequest+xml +application/vnd.enliven=nml +application/vnd.epson.esf=esf +application/vnd.epson.msf=msf +application/vnd.epson.quickanime=qam +application/vnd.epson.salt=slt +application/vnd.epson.ssf=ssf +# application/vnd.ericsson.quickcall +application/vnd.eszigno3+xml=es3 et3 +# application/vnd.etsi.aoc+xml +# application/vnd.etsi.cug+xml +# application/vnd.etsi.iptvcommand+xml +# application/vnd.etsi.iptvdiscovery+xml +# application/vnd.etsi.iptvprofile+xml +# application/vnd.etsi.iptvsad-bc+xml +# application/vnd.etsi.iptvsad-cod+xml +# application/vnd.etsi.iptvsad-npvr+xml +# application/vnd.etsi.iptvueprofile+xml +# application/vnd.etsi.mcid+xml +# application/vnd.etsi.sci+xml +# application/vnd.etsi.simservs+xml +# application/vnd.etsi.tsl+xml +# application/vnd.etsi.tsl.der +# application/vnd.eudora.data +application/vnd.ezpix-album=ez2 +application/vnd.ezpix-package=ez3 +# application/vnd.f-secure.mobile +application/vnd.fdf=fdf +application/vnd.fdsn.mseed=mseed +application/vnd.fdsn.seed=seed dataless +# application/vnd.ffsns +# application/vnd.fints +application/vnd.flographit=gph +application/vnd.fluxtime.clip=ftc +# application/vnd.font-fontforge-sfd +application/vnd.framemaker=fm frame maker book +application/vnd.frogans.fnc=fnc +application/vnd.frogans.ltf=ltf +application/vnd.fsc.weblaunch=fsc +application/vnd.fujitsu.oasys=oas +application/vnd.fujitsu.oasys2=oa2 +application/vnd.fujitsu.oasys3=oa3 +application/vnd.fujitsu.oasysgp=fg5 +application/vnd.fujitsu.oasysprs=bh2 +# application/vnd.fujixerox.art-ex +# application/vnd.fujixerox.art4 +# application/vnd.fujixerox.hbpl +application/vnd.fujixerox.ddd=ddd +application/vnd.fujixerox.docuworks=xdw +application/vnd.fujixerox.docuworks.binder=xbd +# application/vnd.fut-misnet +application/vnd.fuzzysheet=fzs +application/vnd.genomatix.tuxedo=txd +# application/vnd.geocube+xml +application/vnd.geogebra.file=ggb +application/vnd.geogebra.tool=ggt +application/vnd.geometry-explorer=gex gre +application/vnd.geonext=gxt +application/vnd.geoplan=g2w +application/vnd.geospace=g3w +# application/vnd.globalplatform.card-content-mgt +# application/vnd.globalplatform.card-content-mgt-response +application/vnd.gmx=gmx +application/vnd.google-earth.kml+xml=kml +application/vnd.google-earth.kmz=kmz +application/vnd.grafeq=gqf gqs +# application/vnd.gridmp +application/vnd.groove-account=gac +application/vnd.groove-help=ghf +application/vnd.groove-identity-message=gim +application/vnd.groove-injector=grv +application/vnd.groove-tool-message=gtm +application/vnd.groove-tool-template=tpl +application/vnd.groove-vcard=vcg +application/vnd.handheld-entertainment+xml=zmm +application/vnd.hbci=hbci +# application/vnd.hcl-bireports +application/vnd.hhe.lesson-player=les +application/vnd.hp-hpgl=hpgl +application/vnd.hp-hpid=hpid +application/vnd.hp-hps=hps +application/vnd.hp-jlyt=jlt +application/vnd.hp-pcl=pcl +application/vnd.hp-pclxl=pclxl +# application/vnd.httphone +application/vnd.hydrostatix.sof-data=sfd-hdstx +application/vnd.hzn-3d-crossword=x3d +# application/vnd.ibm.afplinedata +# application/vnd.ibm.electronic-media +application/vnd.ibm.minipay=mpy +application/vnd.ibm.modcap=afp listafp list3820 +application/vnd.ibm.rights-management=irm +application/vnd.ibm.secure-container=sc +application/vnd.iccprofile=icc icm +application/vnd.igloader=igl +application/vnd.immervision-ivp=ivp +application/vnd.immervision-ivu=ivu +# application/vnd.informedcontrol.rms+xml +# application/vnd.informix-visionary +application/vnd.intercon.formnet=xpw xpx +# application/vnd.intertrust.digibox +# application/vnd.intertrust.nncp +application/vnd.intu.qbo=qbo +application/vnd.intu.qfx=qfx +# application/vnd.iptc.g2.conceptitem+xml +# application/vnd.iptc.g2.knowledgeitem+xml +# application/vnd.iptc.g2.newsitem+xml +# application/vnd.iptc.g2.packageitem+xml +application/vnd.ipunplugged.rcprofile=rcprofile +application/vnd.irepository.package+xml=irp +application/vnd.is-xpr=xpr +application/vnd.jam=jam +# application/vnd.japannet-directory-service +# application/vnd.japannet-jpnstore-wakeup +# application/vnd.japannet-payment-wakeup +# application/vnd.japannet-registration +# application/vnd.japannet-registration-wakeup +# application/vnd.japannet-setstore-wakeup +# application/vnd.japannet-verification +# application/vnd.japannet-verification-wakeup +application/vnd.jcp.javame.midlet-rms=rms +application/vnd.jisp=jisp +application/vnd.joost.joda-archive=joda +application/vnd.kahootz=ktz ktr +application/vnd.kde.karbon=karbon +application/vnd.kde.kchart=chrt +application/vnd.kde.kformula=kfo +application/vnd.kde.kivio=flw +application/vnd.kde.kontour=kon +application/vnd.kde.kpresenter=kpr kpt +application/vnd.kde.kspread=ksp +application/vnd.kde.kword=kwd kwt +application/vnd.kenameaapp=htke +application/vnd.kidspiration=kia +application/vnd.kinar=kne knp +application/vnd.koan=skp skd skt skm +application/vnd.kodak-descriptor=sse +# application/vnd.liberty-request+xml +application/vnd.llamagraphics.life-balance.desktop=lbd +application/vnd.llamagraphics.life-balance.exchange+xml=lbe +application/vnd.lotus-1-2-3=123 +application/vnd.lotus-approach=apr +application/vnd.lotus-freelance=pre +application/vnd.lotus-notes=nsf +application/vnd.lotus-organizer=org +application/vnd.lotus-screencam=scm +application/vnd.lotus-wordpro=lwp +application/vnd.macports.portpkg=portpkg +# application/vnd.marlin.drm.actiontoken+xml +# application/vnd.marlin.drm.conftoken+xml +# application/vnd.marlin.drm.license+xml +# application/vnd.marlin.drm.mdcf +application/vnd.mcd=mcd +application/vnd.medcalcdata=mc1 +application/vnd.mediastation.cdkey=cdkey +# application/vnd.meridian-slingshot +application/vnd.mfer=mwf +application/vnd.mfmp=mfm +application/vnd.micrografx.flo=flo +application/vnd.micrografx.igx=igx +application/vnd.mif=mif +# application/vnd.minisoft-hp3000-save +# application/vnd.mitsubishi.misty-guard.trustweb +application/vnd.mobius.daf=daf +application/vnd.mobius.dis=dis +application/vnd.mobius.mbk=mbk +application/vnd.mobius.mqy=mqy +application/vnd.mobius.msl=msl +application/vnd.mobius.plc=plc +application/vnd.mobius.txf=txf +application/vnd.mophun.application=mpn +application/vnd.mophun.certificate=mpc +# application/vnd.motorola.flexsuite +# application/vnd.motorola.flexsuite.adsi +# application/vnd.motorola.flexsuite.fis +# application/vnd.motorola.flexsuite.gotap +# application/vnd.motorola.flexsuite.kmr +# application/vnd.motorola.flexsuite.ttc +# application/vnd.motorola.flexsuite.wem +# application/vnd.motorola.iprm +application/vnd.mozilla.xul+xml=xul +application/vnd.ms-artgalry=cil +# application/vnd.ms-asf +application/vnd.ms-cab-compressed=cab +application/vnd.ms-excel=xls xlm xla xlc xlt xlw +application/vnd.ms-excel.addin.macroenabled.12=xlam +application/vnd.ms-excel.sheet.binary.macroenabled.12=xlsb +application/vnd.ms-excel.sheet.macroenabled.12=xlsm +application/vnd.ms-excel.template.macroenabled.12=xltm +application/vnd.ms-fontobject=eot +application/vnd.ms-htmlhelp=chm +application/vnd.ms-ims=ims +application/vnd.ms-lrm=lrm +application/vnd.ms-pki.seccat=cat +application/vnd.ms-pki.stl=stl +# application/vnd.ms-playready.initiator+xml +application/vnd.ms-powerpoint=ppt pps pot +application/vnd.ms-powerpoint.addin.macroenabled.12=ppam +application/vnd.ms-powerpoint.presentation.macroenabled.12=pptm +application/vnd.ms-powerpoint.slide.macroenabled.12=sldm +application/vnd.ms-powerpoint.slideshow.macroenabled.12=ppsm +application/vnd.ms-powerpoint.template.macroenabled.12=potm +application/vnd.ms-project=mpp mpt +# application/vnd.ms-tnef +# application/vnd.ms-wmdrm.lic-chlg-req +# application/vnd.ms-wmdrm.lic-resp +# application/vnd.ms-wmdrm.meter-chlg-req +# application/vnd.ms-wmdrm.meter-resp +application/vnd.ms-word.document.macroenabled.12=docm +application/vnd.ms-word.template.macroenabled.12=dotm +application/vnd.ms-works=wps wks wcm wdb +application/vnd.ms-wpl=wpl +application/vnd.ms-xpsdocument=xps +application/vnd.mseq=mseq +# application/vnd.msign +# application/vnd.multiad.creator +# application/vnd.multiad.creator.cif +# application/vnd.music-niff +application/vnd.musician=mus +application/vnd.muvee.style=msty +# application/vnd.ncd.control +# application/vnd.ncd.reference +# application/vnd.nervana +# application/vnd.netfpx +application/vnd.neurolanguage.nlu=nlu +application/vnd.noblenet-directory=nnd +application/vnd.noblenet-sealer=nns +application/vnd.noblenet-web=nnw +# application/vnd.nokia.catalogs +# application/vnd.nokia.conml+wbxml +# application/vnd.nokia.conml+xml +# application/vnd.nokia.isds-radio-presets +# application/vnd.nokia.iptv.config+xml +# application/vnd.nokia.landmark+wbxml +# application/vnd.nokia.landmark+xml +# application/vnd.nokia.landmarkcollection+xml +# application/vnd.nokia.n-gage.ac+xml +application/vnd.nokia.n-gage.data=ngdat +application/vnd.nokia.n-gage.symbian.install=n-gage +# application/vnd.nokia.ncd +# application/vnd.nokia.pcd+wbxml +# application/vnd.nokia.pcd+xml +application/vnd.nokia.radio-preset=rpst +application/vnd.nokia.radio-presets=rpss +application/vnd.novadigm.edm=edm +application/vnd.novadigm.edx=edx +application/vnd.novadigm.ext=ext +# application/vnd.ntt-local.file-transfer +application/vnd.oasis.opendocument.chart=odc +application/vnd.oasis.opendocument.chart-template=otc +application/vnd.oasis.opendocument.database=odb +application/vnd.oasis.opendocument.formula=odf +application/vnd.oasis.opendocument.formula-template=odft +application/vnd.oasis.opendocument.graphics=odg +application/vnd.oasis.opendocument.graphics-template=otg +application/vnd.oasis.opendocument.image=odi +application/vnd.oasis.opendocument.image-template=oti +application/vnd.oasis.opendocument.presentation=odp +application/vnd.oasis.opendocument.presentation-template=otp +application/vnd.oasis.opendocument.spreadsheet=ods +application/vnd.oasis.opendocument.spreadsheet-template=ots +application/vnd.oasis.opendocument.text=odt +application/vnd.oasis.opendocument.text-master=otm +application/vnd.oasis.opendocument.text-template=ott +application/vnd.oasis.opendocument.text-web=oth +# application/vnd.obn +application/vnd.olpc-sugar=xo +# application/vnd.oma-scws-config +# application/vnd.oma-scws-http-request +# application/vnd.oma-scws-http-response +# application/vnd.oma.bcast.associated-procedure-parameter+xml +# application/vnd.oma.bcast.drm-trigger+xml +# application/vnd.oma.bcast.imd+xml +# application/vnd.oma.bcast.ltkm +# application/vnd.oma.bcast.notification+xml +# application/vnd.oma.bcast.provisioningtrigger +# application/vnd.oma.bcast.sgboot +# application/vnd.oma.bcast.sgdd+xml +# application/vnd.oma.bcast.sgdu +# application/vnd.oma.bcast.simple-symbol-container +# application/vnd.oma.bcast.smartcard-trigger+xml +# application/vnd.oma.bcast.sprov+xml +# application/vnd.oma.bcast.stkm +# application/vnd.oma.dcd +# application/vnd.oma.dcdc +application/vnd.oma.dd2+xml=dd2 +# application/vnd.oma.drm.risd+xml +# application/vnd.oma.group-usage-list+xml +# application/vnd.oma.poc.detailed-progress-report+xml +# application/vnd.oma.poc.final-report+xml +# application/vnd.oma.poc.groups+xml +# application/vnd.oma.poc.invocation-descriptor+xml +# application/vnd.oma.poc.optimized-progress-report+xml +# application/vnd.oma.push +# application/vnd.oma.scidm.messages+xml +# application/vnd.oma.xcap-directory+xml +# application/vnd.omads-email+xml +# application/vnd.omads-file+xml +# application/vnd.omads-folder+xml +# application/vnd.omaloc-supl-init +application/vnd.openofficeorg.extension=oxt +# application/vnd.openxmlformats-officedocument.custom-properties+xml +# application/vnd.openxmlformats-officedocument.customxmlproperties+xml +# application/vnd.openxmlformats-officedocument.drawing+xml +# application/vnd.openxmlformats-officedocument.drawingml.chart+xml +# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml +# application/vnd.openxmlformats-officedocument.extended-properties+xml +# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml +# application/vnd.openxmlformats-officedocument.presentationml.comments+xml +# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml +# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml +# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml +application/vnd.openxmlformats-officedocument.presentationml.presentation=pptx +# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml +application/vnd.openxmlformats-officedocument.presentationml.slide=sldx +# application/vnd.openxmlformats-officedocument.presentationml.slide+xml +# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml +# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml +application/vnd.openxmlformats-officedocument.presentationml.slideshow=ppsx +# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml +# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml +# application/vnd.openxmlformats-officedocument.presentationml.tags+xml +application/vnd.openxmlformats-officedocument.presentationml.template=potx +# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=xlsx +# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml +application/vnd.openxmlformats-officedocument.spreadsheetml.template=xltx +# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml +# application/vnd.openxmlformats-officedocument.theme+xml +# application/vnd.openxmlformats-officedocument.themeoverride+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml +application/vnd.openxmlformats-officedocument.wordprocessingml.document=docx +# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml +application/vnd.openxmlformats-officedocument.wordprocessingml.template=dotx +# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml +# application/vnd.openxmlformats-package.core-properties+xml +# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml +# application/vnd.osa.netdeploy +# application/vnd.osgi.bundle +application/vnd.osgi.dp=dp +# application/vnd.otps.ct-kip+xml +application/vnd.palm=pdb pqa oprc +# application/vnd.paos.xml +application/vnd.pawaafile=paw +application/vnd.pg.format=str +application/vnd.pg.osasli=ei6 +# application/vnd.piaccess.application-licence +application/vnd.picsel=efif +application/vnd.pmi.widget=wg +# application/vnd.poc.group-advertisement+xml +application/vnd.pocketlearn=plf +application/vnd.powerbuilder6=pbd +# application/vnd.powerbuilder6-s +# application/vnd.powerbuilder7 +# application/vnd.powerbuilder7-s +# application/vnd.powerbuilder75 +# application/vnd.powerbuilder75-s +# application/vnd.preminet +application/vnd.previewsystems.box=box +application/vnd.proteus.magazine=mgz +application/vnd.publishare-delta-tree=qps +application/vnd.pvi.ptid1=ptid +# application/vnd.pwg-multiplexed +# application/vnd.pwg-xhtml-print+xml +# application/vnd.qualcomm.brew-app-res +application/vnd.quark.quarkxpress=qxd qxt qwd qwt qxl qxb +# application/vnd.radisys.moml+xml +# application/vnd.radisys.msml+xml +# application/vnd.radisys.msml-audit+xml +# application/vnd.radisys.msml-audit-conf+xml +# application/vnd.radisys.msml-audit-conn+xml +# application/vnd.radisys.msml-audit-dialog+xml +# application/vnd.radisys.msml-audit-stream+xml +# application/vnd.radisys.msml-conf+xml +# application/vnd.radisys.msml-dialog+xml +# application/vnd.radisys.msml-dialog-base+xml +# application/vnd.radisys.msml-dialog-fax-detect+xml +# application/vnd.radisys.msml-dialog-fax-sendrecv+xml +# application/vnd.radisys.msml-dialog-group+xml +# application/vnd.radisys.msml-dialog-speech+xml +# application/vnd.radisys.msml-dialog-transform+xml +# application/vnd.rapid +application/vnd.realvnc.bed=bed +application/vnd.recordare.musicxml=mxl +application/vnd.recordare.musicxml+xml=musicxml +# application/vnd.renlearn.rlprint +application/vnd.rim.cod=cod +application/vnd.rn-realmedia=rm +application/vnd.route66.link66+xml=link66 +# application/vnd.ruckus.download +# application/vnd.s3sms +application/vnd.sailingtracker.track=st +# application/vnd.sbm.cid +# application/vnd.sbm.mid2 +# application/vnd.scribus +# application/vnd.sealed.3df +# application/vnd.sealed.csf +# application/vnd.sealed.doc +# application/vnd.sealed.eml +# application/vnd.sealed.mht +# application/vnd.sealed.net +# application/vnd.sealed.ppt +# application/vnd.sealed.tiff +# application/vnd.sealed.xls +# application/vnd.sealedmedia.softseal.html +# application/vnd.sealedmedia.softseal.pdf +application/vnd.seemail=see +application/vnd.sema=sema +application/vnd.semd=semd +application/vnd.semf=semf +application/vnd.shana.informed.formdata=ifm +application/vnd.shana.informed.formtemplate=itp +application/vnd.shana.informed.interchange=iif +application/vnd.shana.informed.package=ipk +application/vnd.simtech-mindmapper=twd twds +application/vnd.smaf=mmf +# application/vnd.smart.notebook +application/vnd.smart.teacher=teacher +# application/vnd.software602.filler.form+xml +# application/vnd.software602.filler.form-xml-zip +application/vnd.solent.sdkm+xml=sdkm sdkd +application/vnd.spotfire.dxp=dxp +application/vnd.spotfire.sfs=sfs +# application/vnd.sss-cod +# application/vnd.sss-dtf +# application/vnd.sss-ntf +application/vnd.stardivision.calc=sdc +application/vnd.stardivision.draw=sda +application/vnd.stardivision.impress=sdd +application/vnd.stardivision.math=smf +application/vnd.stardivision.writer=sdw +application/vnd.stardivision.writer=vor +application/vnd.stardivision.writer-global=sgl +# application/vnd.street-stream +application/vnd.sun.xml.calc=sxc +application/vnd.sun.xml.calc.template=stc +application/vnd.sun.xml.draw=sxd +application/vnd.sun.xml.draw.template=std +application/vnd.sun.xml.impress=sxi +application/vnd.sun.xml.impress.template=sti +application/vnd.sun.xml.math=sxm +application/vnd.sun.xml.writer=sxw +application/vnd.sun.xml.writer.global=sxg +application/vnd.sun.xml.writer.template=stw +# application/vnd.sun.wadl+xml +application/vnd.sus-calendar=sus susp +application/vnd.svd=svd +# application/vnd.swiftview-ics +application/vnd.symbian.install=sis sisx +application/vnd.syncml+xml=xsm +application/vnd.syncml.dm+wbxml=bdm +application/vnd.syncml.dm+xml=xdm +# application/vnd.syncml.dm.notification +# application/vnd.syncml.ds.notification +application/vnd.tao.intent-module-archive=tao +application/vnd.tmobile-livetv=tmo +application/vnd.trid.tpt=tpt +application/vnd.triscape.mxs=mxs +application/vnd.trueapp=tra +# application/vnd.truedoc +application/vnd.ufdl=ufd ufdl +application/vnd.uiq.theme=utz +application/vnd.umajin=umj +application/vnd.unity=unityweb +application/vnd.uoml+xml=uoml +# application/vnd.uplanet.alert +# application/vnd.uplanet.alert-wbxml +# application/vnd.uplanet.bearer-choice +# application/vnd.uplanet.bearer-choice-wbxml +# application/vnd.uplanet.cacheop +# application/vnd.uplanet.cacheop-wbxml +# application/vnd.uplanet.channel +# application/vnd.uplanet.channel-wbxml +# application/vnd.uplanet.list +# application/vnd.uplanet.list-wbxml +# application/vnd.uplanet.listcmd +# application/vnd.uplanet.listcmd-wbxml +# application/vnd.uplanet.signal +application/vnd.vcx=vcx +# application/vnd.vd-study +# application/vnd.vectorworks +# application/vnd.vidsoft.vidconference +application/vnd.visio=vsd vst vss vsw +application/vnd.visionary=vis +# application/vnd.vividence.scriptfile +application/vnd.vsf=vsf +# application/vnd.wap.sic +# application/vnd.wap.slc +application/vnd.wap.wbxml=wbxml +application/vnd.wap.wmlc=wmlc +application/vnd.wap.wmlscriptc=wmlsc +application/vnd.webturbo=wtb +# application/vnd.wfa.wsc +# application/vnd.wmc +# application/vnd.wmf.bootstrap +# application/vnd.wolfram.mathematica +# application/vnd.wolfram.mathematica.package +application/vnd.wolfram.player=nbp +application/vnd.wordperfect=wpd +application/vnd.wqd=wqd +# application/vnd.wrq-hp3000-labelled +application/vnd.wt.stf=stf +# application/vnd.wv.csp+wbxml +# application/vnd.wv.csp+xml +# application/vnd.wv.ssp+xml +application/vnd.xara=xar +application/vnd.xfdl=xfdl +# application/vnd.xfdl.webform +# application/vnd.xmi+xml +# application/vnd.xmpie.cpkg +# application/vnd.xmpie.dpkg +# application/vnd.xmpie.plan +# application/vnd.xmpie.ppkg +# application/vnd.xmpie.xlim +application/vnd.yamaha.hv-dic=hvd +application/vnd.yamaha.hv-script=hvs +application/vnd.yamaha.hv-voice=hvp +application/vnd.yamaha.openscoreformat=osf +application/vnd.yamaha.openscoreformat.osfpvg+xml=osfpvg +application/vnd.yamaha.smaf-audio=saf +application/vnd.yamaha.smaf-phrase=spf +application/vnd.yellowriver-custom-menu=cmp +application/vnd.zul=zir zirz +application/vnd.zzazz.deck+xml=zaz +application/voicexml+xml=vxml +# application/watcherinfo+xml +# application/whoispp-query +# application/whoispp-response +application/winhlp=hlp +# application/wita +# application/wordperfect5.1 +application/wsdl+xml=wsdl +application/wspolicy+xml=wspolicy +application/x-abiword=abw +application/x-ace-compressed=ace +application/x-authorware-bin=aab x32 u32 vox +application/x-authorware-map=aam +application/x-authorware-seg=aas +application/x-bcpio=bcpio +application/x-bittorrent=torrent +application/x-bzip=bz +application/x-bzip2=bz2 boz +application/x-cdlink=vcd +application/x-chat=chat +application/x-chess-pgn=pgn +# application/x-compress +application/x-cpio=cpio +application/x-csh=csh +application/x-debian-package=deb udeb +application/x-director=dir dcr dxr cst cct cxt w3d fgd swa +application/x-doom=wad +application/x-dtbncx+xml=ncx +application/x-dtbook+xml=dtb +application/x-dtbresource+xml=res +application/x-dvi=dvi +application/x-font-bdf=bdf +# application/x-font-dos +# application/x-font-framemaker +application/x-font-ghostscript=gsf +# application/x-font-libgrx +application/x-font-linux-psf=psf +application/x-font-otf=otf +application/x-font-pcf=pcf +application/x-font-snf=snf +# application/x-font-speedo +# application/x-font-sunos-news +application/x-font-ttf=ttf ttc +application/x-font-type1=pfa pfb pfm afm +# application/x-font-vfont +application/x-futuresplash=spl +application/x-gnumeric=gnumeric +application/x-gtar=gtar +# application/x-gzip +application/x-hdf=hdf +application/x-java-jnlp-file=jnlp +application/x-latex=latex +application/x-mobipocket-ebook=prc mobi +application/x-ms-application=application +application/x-ms-wmd=wmd +application/x-ms-wmz=wmz +application/x-ms-xbap=xbap +application/x-msaccess=mdb +application/x-msbinder=obd +application/x-mscardfile=crd +application/x-msclip=clp +application/x-msdownload=exe dll com bat msi +application/x-msmediaview=mvb m13 m14 +application/x-msmetafile=wmf +application/x-msmoney=mny +application/x-mspublisher=pub +application/x-msschedule=scd +application/x-msterminal=trm +application/x-mswrite=wri +application/x-netcdf=nc cdf +application/x-pkcs12=p12 pfx +application/x-pkcs7-certificates=p7b spc +application/x-pkcs7-certreqresp=p7r +application/x-rar-compressed=rar +application/x-sh=sh +application/x-shar=shar +application/x-shockwave-flash=swf +application/x-silverlight-app=xap +application/x-stuffit=sit +application/x-stuffitx=sitx +application/x-sv4cpio=sv4cpio +application/x-sv4crc=sv4crc +application/x-tar=tar +application/x-tcl=tcl +application/x-tex=tex +application/x-tex-tfm=tfm +application/x-texinfo=texinfo texi +application/x-ustar=ustar +application/x-wais-source=src +application/x-x509-ca-cert=der crt +application/x-xfig=fig +application/x-xpinstall=xpi +# application/x400-bp +# application/xcap-att+xml +# application/xcap-caps+xml +# application/xcap-el+xml +# application/xcap-error+xml +# application/xcap-ns+xml +# application/xcon-conference-info-diff+xml +# application/xcon-conference-info+xml +application/xenc+xml=xenc +application/xhtml+xml=xhtml xht +# application/xhtml-voice+xml +application/xml=xml xsl +application/xml-dtd=dtd +# application/xml-external-parsed-entity +# application/xmpp+xml +application/xop+xml=xop +application/xslt+xml=xslt +application/xspf+xml=xspf +application/xv+xml=mxml xhvml xvml xvm +application/zip=zip +# audio/32kadpcm +# audio/3gpp +# audio/3gpp2 +# audio/ac3 +audio/adpcm=adp +# audio/amr +# audio/amr-wb +# audio/amr-wb+ +# audio/asc +# audio/atrac-advanced-lossless +# audio/atrac-x +# audio/atrac3 +audio/basic=au snd +# audio/bv16 +# audio/bv32 +# audio/clearmode +# audio/cn +# audio/dat12 +# audio/dls +# audio/dsr-es201108 +# audio/dsr-es202050 +# audio/dsr-es202211 +# audio/dsr-es202212 +# audio/dvi4 +# audio/eac3 +# audio/evrc +# audio/evrc-qcp +# audio/evrc0 +# audio/evrc1 +# audio/evrcb +# audio/evrcb0 +# audio/evrcb1 +# audio/evrcwb +# audio/evrcwb0 +# audio/evrcwb1 +# audio/example +# audio/g719 +# audio/g722 +# audio/g7221 +# audio/g723 +# audio/g726-16 +# audio/g726-24 +# audio/g726-32 +# audio/g726-40 +# audio/g728 +# audio/g729 +# audio/g7291 +# audio/g729d +# audio/g729e +# audio/gsm +# audio/gsm-efr +# audio/ilbc +# audio/l16 +# audio/l20 +# audio/l24 +# audio/l8 +# audio/lpc +audio/midi=mid midi kar rmi +# audio/mobile-xmf +audio/mp4=mp4a +# audio/mp4a-latm +# audio/mpa +# audio/mpa-robust +audio/mpeg=mpga mp2 mp2a mp3 m2a m3a +# audio/mpeg4-generic +audio/ogg=oga ogg spx +# audio/parityfec +# audio/pcma +# audio/pcma-wb +# audio/pcmu-wb +# audio/pcmu +# audio/prs.sid +# audio/qcelp +# audio/red +# audio/rtp-enc-aescm128 +# audio/rtp-midi +# audio/rtx +# audio/smv +# audio/smv0 +# audio/smv-qcp +# audio/sp-midi +# audio/speex +# audio/t140c +# audio/t38 +# audio/telephone-event +# audio/tone +# audio/uemclip +# audio/ulpfec +# audio/vdvi +# audio/vmr-wb +# audio/vnd.3gpp.iufp +# audio/vnd.4sb +# audio/vnd.audiokoz +# audio/vnd.celp +# audio/vnd.cisco.nse +# audio/vnd.cmles.radio-events +# audio/vnd.cns.anp1 +# audio/vnd.cns.inf1 +audio/vnd.digital-winds=eol +# audio/vnd.dlna.adts +# audio/vnd.dolby.heaac.1 +# audio/vnd.dolby.heaac.2 +# audio/vnd.dolby.mlp +# audio/vnd.dolby.mps +# audio/vnd.dolby.pl2 +# audio/vnd.dolby.pl2x +# audio/vnd.dolby.pl2z +# audio/vnd.dolby.pulse.1 +audio/vnd.dra=dra +audio/vnd.dts=dts +audio/vnd.dts.hd=dtshd +# audio/vnd.everad.plj +# audio/vnd.hns.audio +audio/vnd.lucent.voice=lvp +audio/vnd.ms-playready.media.pya=pya +# audio/vnd.nokia.mobile-xmf +# audio/vnd.nortel.vbk +audio/vnd.nuera.ecelp4800=ecelp4800 +audio/vnd.nuera.ecelp7470=ecelp7470 +audio/vnd.nuera.ecelp9600=ecelp9600 +# audio/vnd.octel.sbc +# audio/vnd.qcelp +# audio/vnd.rhetorex.32kadpcm +# audio/vnd.sealedmedia.softseal.mpeg +# audio/vnd.vmx.cvsd +# audio/vorbis +# audio/vorbis-config +audio/x-aac=aac +audio/x-aiff=aif aiff aifc +audio/x-mpegurl=m3u +audio/x-ms-wax=wax +audio/x-ms-wma=wma +audio/x-pn-realaudio=ram ra +audio/x-pn-realaudio-plugin=rmp +audio/x-wav=wav +chemical/x-cdx=cdx +chemical/x-cif=cif +chemical/x-cmdf=cmdf +chemical/x-cml=cml +chemical/x-csml=csml +# chemical/x-pdb +chemical/x-xyz=xyz +image/bmp=bmp +image/cgm=cgm +# image/example +# image/fits +image/g3fax=g3 +image/gif=gif +image/ief=ief +# image/jp2 +image/jpeg=jpeg jpg jpe +# image/jpm +# image/jpx +# image/naplps +image/png=png +image/prs.btif=btif +# image/prs.pti +image/svg+xml=svg svgz +# image/t38 +image/tiff=tiff tif +# image/tiff-fx +image/vnd.adobe.photoshop=psd +# image/vnd.cns.inf2 +image/vnd.djvu=djvu djv +image/vnd.dwg=dwg +image/vnd.dxf=dxf +image/vnd.fastbidsheet=fbs +image/vnd.fpx=fpx +image/vnd.fst=fst +image/vnd.fujixerox.edmics-mmr=mmr +image/vnd.fujixerox.edmics-rlc=rlc +# image/vnd.globalgraphics.pgb +# image/vnd.microsoft.icon +# image/vnd.mix +image/vnd.ms-modi=mdi +image/vnd.net-fpx=npx +# image/vnd.radiance +# image/vnd.sealed.png +# image/vnd.sealedmedia.softseal.gif +# image/vnd.sealedmedia.softseal.jpg +# image/vnd.svf +image/vnd.wap.wbmp=wbmp +image/vnd.xiff=xif +image/x-cmu-raster=ras +image/x-cmx=cmx +image/x-freehand=fh fhc fh4 fh5 fh7 +image/x-icon=ico +image/x-pcx=pcx +image/x-pict=pic pct +image/x-portable-anymap=pnm +image/x-portable-bitmap=pbm +image/x-portable-graymap=pgm +image/x-portable-pixmap=ppm +image/x-rgb=rgb +image/x-xbitmap=xbm +image/x-xpixmap=xpm +image/x-xwindowdump=xwd +# message/cpim +# message/delivery-status +# message/disposition-notification +# message/example +# message/external-body +# message/global +# message/global-delivery-status +# message/global-disposition-notification +# message/global-headers +# message/http +# message/imdn+xml +# message/news +# message/partial +message/rfc822=eml mime +# message/s-http +# message/sip +# message/sipfrag +# message/tracking-status +# message/vnd.si.simp +# model/example +model/iges=igs iges +model/mesh=msh mesh silo +model/vnd.dwf=dwf +# model/vnd.flatland.3dml +model/vnd.gdl=gdl +# model/vnd.gs-gdl +# model/vnd.gs.gdl +model/vnd.gtw=gtw +# model/vnd.moml+xml +model/vnd.mts=mts +# model/vnd.parasolid.transmit.binary +# model/vnd.parasolid.transmit.text +model/vnd.vtu=vtu +model/vrml=wrl vrml +# multipart/alternative +# multipart/appledouble +# multipart/byteranges +# multipart/digest +# multipart/encrypted +# multipart/example +# multipart/form-data +# multipart/header-set +# multipart/mixed +# multipart/parallel +# multipart/related +# multipart/report +# multipart/signed +# multipart/voice-message +text/calendar=ics ifb +text/css=css +text/csv=csv +# text/directory +# text/dns +# text/ecmascript +# text/enriched +# text/example +text/html=html htm +text/javascript=js +# text/parityfec +text/plain=txt text conf def list log in +# text/prs.fallenstein.rst +text/prs.lines.tag=dsc +# text/vnd.radisys.msml-basic-layout +# text/red +# text/rfc822-headers +text/richtext=rtx +# text/rtf +# text/rtp-enc-aescm128 +# text/rtx +text/sgml=sgml sgm +# text/t140 +text/tab-separated-values=tsv +text/troff=t tr roff man me ms +# text/ulpfec +text/uri-list=uri uris urls +# text/vnd.abc +text/vnd.curl=curl +text/vnd.curl.dcurl=dcurl +text/vnd.curl.scurl=scurl +text/vnd.curl.mcurl=mcurl +# text/vnd.dmclientscript +# text/vnd.esmertec.theme-descriptor +text/vnd.fly=fly +text/vnd.fmi.flexstor=flx +text/vnd.graphviz=gv +text/vnd.in3d.3dml=3dml +text/vnd.in3d.spot=spot +# text/vnd.iptc.newsml +# text/vnd.iptc.nitf +# text/vnd.latex-z +# text/vnd.motorola.reflex +# text/vnd.ms-mediapackage +# text/vnd.net2phone.commcenter.command +# text/vnd.si.uricatalogue +text/vnd.sun.j2me.app-descriptor=jad +# text/vnd.trolltech.linguist +# text/vnd.wap.si +# text/vnd.wap.sl +text/vnd.wap.wml=wml +text/vnd.wap.wmlscript=wmls +text/x-asm=s asm +text/x-c=c cc cxx cpp h hh dic +text/x-fortran=f for f77 f90 +text/x-pascal=p pas +text/x-java-source=java +text/x-setext=etx +text/x-uuencode=uu +text/x-vcalendar=vcs +text/x-vcard=vcf +# text/xml +# text/xml-external-parsed-entity +video/3gpp=3gp +# video/3gpp-tt +video/3gpp2=3g2 +# video/bmpeg +# video/bt656 +# video/celb +# video/dv +# video/example +video/h261=h261 +video/h263=h263 +# video/h263-1998 +# video/h263-2000 +video/h264=h264 +video/jpeg=jpgv +# video/jpeg2000 +video/jpm=jpm jpgm +video/mj2=mj2 mjp2 +# video/mp1s +# video/mp2p +# video/mp2t +video/mp4=mp4 mp4v mpg4 +# video/mp4v-es +video/mpeg=mpeg mpg mpe m1v m2v +# video/mpeg4-generic +# video/mpv +# video/nv +video/ogg=ogv +# video/parityfec +# video/pointer +video/quicktime=qt mov +# video/raw +# video/rtp-enc-aescm128 +# video/rtx +# video/smpte292m +# video/ulpfec +# video/vc1 +# video/vnd.cctv +# video/vnd.dlna.mpeg-tts +video/vnd.fvt=fvt +# video/vnd.hns.video +# video/vnd.iptvforum.1dparityfec-1010 +# video/vnd.iptvforum.1dparityfec-2005 +# video/vnd.iptvforum.2dparityfec-1010 +# video/vnd.iptvforum.2dparityfec-2005 +# video/vnd.iptvforum.ttsavc +# video/vnd.iptvforum.ttsmpeg2 +# video/vnd.motorola.video +# video/vnd.motorola.videop +video/vnd.mpegurl=mxu m4u +video/vnd.ms-playready.media.pyv=pyv +# video/vnd.nokia.interleaved-multimedia +# video/vnd.nokia.videovoip +# video/vnd.objectvideo +# video/vnd.sealed.mpeg1 +# video/vnd.sealed.mpeg4 +# video/vnd.sealed.swf +# video/vnd.sealedmedia.softseal.mov +video/vnd.vivo=viv +video/x-f4v=f4v +video/x-fli=fli +video/x-flv=flv +video/x-m4v=m4v +video/x-ms-asf=asf asx +video/x-ms-wm=wm +video/x-ms-wmv=wmv +video/x-ms-wmx=wmx +video/x-ms-wvx=wvx +video/x-msvideo=avi +video/x-sgi-movie=movie +x-conference/x-cooltalk=ice diff --git a/src/main/webapp/WEB-INF/spring/root-context.xml b/src/main/webapp/WEB-INF/spring/root-context.xml index fcd38e91..558f9e61 100644 --- a/src/main/webapp/WEB-INF/spring/root-context.xml +++ b/src/main/webapp/WEB-INF/spring/root-context.xml @@ -107,7 +107,7 @@ - + @@ -181,7 +181,7 @@ - + @@ -440,6 +440,6 @@ - +