http.DetectContentType([]byte)
包中有net/http
个功能。但是仅支持有限数量的类型。如何添加docx
,doc
,xls
,xlsx
,ppt
,pps
,odt
,{{1}的支持},ods
文件不是扩展名,而是内容。
据我所知,存在一些问题,因为odp
/ docx
/ xlsx
/ pptx
/ odp
文件与{odt
具有相同的签名1}}文件(50 4B 03 04)。
答案 0 :(得分:2)
对于末尾x
的文件,相对容易检测。只需将其解压缩并阅读.rels/_rels
文件即可。它包含文档中主文件的路径。它由名称空间http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument
表示。只需检查它的名字。 docx为document.xml
,xlsx为workbook.xml
,pptx为presentation.xml
。
此处可以找到更多信息ECMA-376。
二进制格式难以检测。基本上,您需要阅读MS-CFB文件系统并检查条目:
WordDocument
for doc Workbook
或Book
for xls PowerPoint Document
for ppt EncryptedPackage
表示文件已加密。答案 1 :(得分:1)
目前无法扩展http.DetectContentType
,因为它使用固定的,未导出的"嗅探器":https://golang.org/src/net/http/sniff.go(sniffSignatures
在第49行在撰写本文时)。
此外,我通过godoc.org快速查找了一个更好的软件包,但没有找到任何可扩展和面向内容的软件包。
我的建议是:在Go的内容嗅探器实现(https://mimesniff.spec.whatwg.org/之后)的指导下构建自己的包。
编辑:如果您愿意使用CGO并且您使用的是nix,则可以使用libmagic绑定,例如https://github.com/jteeuwen/magic。
答案 2 :(得分:1)
答案 3 :(得分:1)