Есть http.DetectContentType([]byte)
функция в net/http
упаковка. Но поддерживается только ограниченное количество типов. Как добавить поддержку docx
, doc
, xls
, xlsx
, ppt
, pps
, odt
, ods
, odp
файлы не по расширению, а по содержанию. Насколько я знаю, есть некоторые проблемы, потому что файлы docx
/xlsx
//odp
/odt
имеют ту же подпись, что и файл zip
(50 4B 03 04).Как определить дополнительный тип мим в Голанге
ответ
Для файлов с x
в конце относительно легко обнаружить. Просто разархивируйте его и прочитайте файл .rels/_rels
. Он содержит путь к основному файлу в документе. Он обозначается пространством имен http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument
. Просто проверьте его имя. Это document.xml
для docx, workbook.xml
для xlsx и presentation.xml
для pptx.
Подробнее здесь можно найти здесь ECMA-376.
Двоичные форматы сложнее обнаружить. В общем, вы должны прочитать MS-CFB файловую систему и проверьте записи:
WordDocument
для докаWorkbook
илиBook
для XLSPowerPoint Document
для РРТАEncryptedPackage
означает файл зашифрован.
Там в настоящее время нет способа расширить http.DetectContentType
, как он использует фиксированный неэкспортируемый кусочек «перехватчики»: https://golang.org/src/net/http/sniff.go (sniffSignatures
по линии 49 на момент написания).
Кроме того, я быстро посмотрел на godoc.org в поисках лучшего пакета, но не нашел никаких расширяемых и ориентированных на контент, как вам нужно.
Моим советом было бы: создать собственный пакет, руководствуясь реализацией сниффера контента Go (который следует за https://mimesniff.spec.whatwg.org/).
Редактировать: Если вы хотите использовать CGO, и вы находитесь на nix, вы можете использовать libmagic bindings, например, https://github.com/jteeuwen/magic.
- 1. Определить Excel файл мим тип
- 2. PHP тип imagejpeg мим
- 3. Почему этот тип мим неправильный?
- 4. Неправильный мим-тип вложений EmailMultiAlternatives
- 5. Как определить набор методов интерфейса в Голанге?
- 6. как преобразовать не-мим сообщение для мим почты в C#
- 7. Получение файлов мим типов
- 8. водосвинка определить дополнительный параметр
- 9. Как определить дополнительный внешний ключ в Slick?
- 10. Как добавить дополнительный тип бюллетеня в magento
- 11. как определить дополнительный метод рельсы образуют text_field
- 12. Дополнительный тип 'String?' Не разворачивается
- 13. Swift 'NilLiteralConvertible': дополнительный тип класса
- 14. Как определить рекурсивный тип?
- 15. как определить тип строки
- 16. Swift Дополнительный тип не разворачивается
- 17. Как определить тип файла?
- 18. Как определить тип StoryboardSegue
- 19. Как определить тип диска?
- 20. Как определить тип массива?
- 21. Как определить тип установщика?
- 22. Как определить тип группы?
- 23. Swift Дополнительный тип: как .None == ноль работает
- 24. Как определить тип аутентификации?
- 25. Как определить тип компонента
- 26. Как определить тип выражения?
- 27. Получить XLS тип файла мим с помощью PHP
- 28. Как определить тип функции?
- 29. определить тип, как монады
- 30. Как определить тип файла
https://golang.org/pkg/mime/ –
@SalvadorDali Пакет mime полезен, но вопрос конкретно спрашивает об обнаружении на основе контента, а не расширения. – captncraig