h2non / filetype

Fast, dependency-free Go package to infer binary file types based on the magic numbers header signature

Home Page:https://pkg.go.dev/github.com/h2non/filetype?tab=doc

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Matches .doc as application/vnd.ms-excel

rahulganguly opened this issue · comments

I am trying to detect the MIME type of a .doc file, and the result I get is of type
File type: xls. MIME: application/vnd.ms-excel
or
ile type: ppt. MIME: application/vnd.ms-powerpoint

under the matchers folder

matchers/document.go

The func Doc(), func Xls() and func Ppt() all have the same magic numbers.

return len(buf) > 7 &&
	buf[0] == 0xD0 && buf[1] == 0xCF &&
	buf[2] == 0x11 && buf[3] == 0xE0 &&
	buf[4] == 0xA1 && buf[5] == 0xB1 &&
	buf[6] == 0x1A && buf[7] == 0xE1

Is this the reason why the MimeType is always coming up different?

commented

Microsoft Office container files are zip containers. I don't know a reliable way to detect old Office formats. If you find it, feel free to submit a PR.

@kumakichi It's working?

commented

@mateusmaaia It should work, if you found some MS office files can not be detected correctly, please let me know

@mateusmaaia It should work, if you found some MS office files can not be detected correctly, please let me know

hi there, the doc file still be detected as a ppt file type

commented

@mateusmaaia @jeremywu0127

Oh, I was wrong

#48 only add support for docx/xlsx/pptx(even not very good), leave doc/xls/ppt untouched

So, extra work is needed

commented

@jeremywu0127

doc/xls/ppt check will be a little complex, we can detect they are Composite Document File V2 Document, but we don't know which one it is (doc/xls/ppt).

Maybe we can check the name of creating application, get something like: Microsoft Office Word, it's OK; but if files are created by some none ms-office applications, say:WPS, we know nothing.

So, this problem is not easy to resolve

Yes, I tried a few stuffs but ended validating the content-type header if it's doc/ppy/xls, not the best solution but still works for what I need.

Anyway, thanks! @kumakichi

@jeremywu0127

doc/xls/ppt check will be a little complex, we can detect they are Composite Document File V2 Document, but we don't know which one it is (doc/xls/ppt).

Maybe we can check the name of creating application, get something like: Microsoft Office Word, it's OK; but if files are created by some none ms-office applications, say:WPS, we know nothing.

So, this problem is not easy to resolve

You can detect them by checking GUID of the root entry according to https://stackoverflow.com/questions/29211263/how-to-identify-doc-docx-pdf-xls-and-xlsx-based-on-file-header/48318648#48318648 , implemented in the Rust version bojand/infer#38