Search code examples
gomime-typesdetection

How to detect additional mime type in Golang


There are http.DetectContentType([]byte) function in net/http package. But only limited number of types are supported. How to add support of docx, doc, xls, xlsx, ppt, pps, odt, ods, odp files not by extension, but by the content. As far as I know, there are some problems, because docx/xlsx/pptx/odp/odt files has the same signature as the zip file (50 4B 03 04).


Solution

  • Disclaimer: I'm the author of mimetype.

    For anyone having the same problem 3 years later, nowadays the packages for mime type detection based on the content are the following:

    • filetype

      • pure go, no c bindings
      • can be extented to detect new mime types
      • has issues with files which pass as more than one mime type (ex: xlsx and docx passing as zip) because it stores matching functions in a map, thus it does not guarantee the order of traversal
      • limited number of detected mime types
    • magicmime

      • needs libmagic-dev installed
      • of the 3, it has highest number of detected mime types
      • can be extended, albeit harder... man magic
      • libmagic is not thread safe
    • mimetype

      • pure go, no c bindings
      • higher number of detected mime types than filetype
      • is thread safe
      • can be extended