Estensioni microsoft

di il
10 risposte

Estensioni microsoft

Buongiorno

In un backend ho dei file senza estensione di cui devo ricavare l`estensione originale.

sto usando tika e se faccio detect tra docx e xlsx non fa distinzione di mime.

C`è un modo per distinguere questi formati tra loro?

Grazie

10 Risposte

  • Re: Estensioni microsoft

    Se sei sicuro che non dipenda da tuoi errori potresti segnalare la cosa sul tika open issues https://issues.apache.org/jira/projects/TIKA/issues/TIKA-3176?filter=allopenissues
  • Re: Estensioni microsoft

    filippoaceto ha scritto:


    In un backend ho dei file senza estensione di cui devo ricavare l`estensione originale.

    sto usando tika e se faccio detect tra docx e xlsx non fa distinzione di mime.

    C`è un modo per distinguere questi formati tra loro?
    Non me ne intendo di Apache Tika ma da quanto ho letto poco fa (https://tika.apache.org/1.24.1/detection.htm) il riconoscimento del content si basa sulla interfaccia Detector di cui ci sono svariate implementazioni. Quindi, innanzitutto, quale implementazione stai usando?
  • Re: Estensioni microsoft

    Ho voluto giusto fare una prova con Tika. Ho messo come dipendenze (Maven) queste:
    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-core</artifactId>
        <version>1.24.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-parsers</artifactId>
        <version>1.24.1</version>
    </dependency>
    Da quanto ho letto, non basta il tika-core, perché nel tika-parsers ci sono ulteriori detector utili per il riconoscimento dei file.
    Nota: tika-parsers tira anche dentro SLF4J per il logging ma non ho configurato un binding (non ha importanza per la prova fatta).

    Poi ho scritto questo di prova al volo:
    import java.io.IOException;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import org.apache.tika.config.TikaConfig;
    import org.apache.tika.detect.Detector;
    import org.apache.tika.exception.TikaException;
    import org.apache.tika.io.TikaInputStream;
    import org.apache.tika.metadata.Metadata;
    import org.apache.tika.mime.MediaType;
    
    public class ProvaTika {
        public static void main(String[] args) throws Exception {
            System.out.println(detectMediaType(Paths.get("blablabla\\file_docx_prova")));
            System.out.println(detectMediaType(Paths.get("blablabla\\file_xlsx_prova")));
        }
    
        private static MediaType detectMediaType(Path p) throws TikaException, IOException {
            TikaConfig tika = new TikaConfig();
            Metadata metadata = new Metadata();
            Detector detector = tika.getDetector();
            MediaType mediaType = detector.detect(TikaInputStream.get(p), metadata);
            return mediaType;
        }
    }
    Ed ottengo in output:
    application/vnd.openxmlformats-officedocument.wordprocessingml.document
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
    Quindi effettivamente tika è in grado di distinguere i due documenti. Nota: per la prova ho usato dei documenti docx/xlsx fatti da dei miei colleghi che hanno l'Office Microsoft.
  • Re: Estensioni microsoft

    Grazie infinite.
    Ho visto che il progetto aveva una versione vecchia, la 1.5, di tika-core.

    comunque come hai fatto tu funziona, ma inserendo le librerie nuove nel progetto che sto seguendo, non funziona, esce sempre
    application/x-tika-ooxml

    La libreria parser l`ha presa perchè ci sono le avvertenze del parser, che vuole una libreria per sqlite.


    Strano.
  • Re: Estensioni microsoft

    filippoaceto ha scritto:


    Ho visto che il progetto aveva una versione vecchia, la 1.5, di tika-core.
    Per prova, ho messo <version>1.5</version> nelle due dependency citate prima. L'unica cosa è che con questa versione, non esiste ancora il get(Path) di TikaInputStream. Quindi mantenendo l'uso di Path ho solo modificato in get(p.toFile()).

    Il risultato è lo STESSO di prima, ovvero i due mimetype corretti e distinti.
  • Re: Estensioni microsoft

    Non va neanche così.
    Visto che il progetto su cui sto lavorando non usa maven, sicuramente ci deve essere qualche libreria che manca e che maven importa.
    Devo provare a mettere i jar forse.
  • Re: Estensioni microsoft

    filippoaceto ha scritto:


    Visto che il progetto su cui sto lavorando non usa maven, sicuramente ci deve essere qualche libreria che manca
    Con Maven l'artifact tika-parsers tira dentro una MAREA di altri artifact. Ma tanti ...

    Quindi NON basta di certo solo un tika-parsers-XYZ.jar !

    (questo è un vantaggio nell'usare Maven ..)
  • Re: Estensioni microsoft

    Perfetto, ho aggiunto la commons-compress.jar e funziona.

    Grazie!!!
  • Re: Estensioni microsoft

    Scusate ma docx e xlsx non sono altro che file zip con tante belle cose dentro.
    Se si è in grado di aprire uno zip riconoscerli è banale
  • Re: Estensioni microsoft

    Mi è più comodo tika perché devo riconoscere altri tipi di file, che possono arrivarmi senza estensione, e quindi con questo sistema mi ricavo l'estensione da un hashmap popolato ad hoc che ha come chiave il risultato del detect e valore l'estensione che dovrò aggiungere al file.
Devi accedere o registrarti per scrivere nel forum
10 risposte