1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
package files
import (
"shrine/utils/collections"
"strings"
)
var archiveMimes = collections.SetOf(
"application/zip",
"application/x-rar-compressed",
"application/gzip",
"application/x-7z-compressed",
"application/x-tar",
"application/x-bzip2",
"application/x-xz",
"application/x-compress",
)
var documentMimes = collections.SetOf(
"application/msword",
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"application/vnd.oasis.opendocument.text",
"application/rtf",
"application/epub+zip",
)
var spreadsheetMimes = collections.SetOf(
"application/vnd.ms-excel",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"application/vnd.oasis.opendocument.spreadsheet",
"text/csv",
)
var presentationMimes = collections.SetOf(
"application/vnd.ms-powerpoint",
"application/vnd.openxmlformats-officedocument.presentationml.presentation",
"application/vnd.oasis.opendocument.presentation",
)
var codeMimes = collections.SetOf(
"application/javascript",
"application/json",
"application/xml",
"application/x-httpd-php",
"application/x-sh",
"application/x-python",
"application/typescript",
)
var databaseMimes = collections.SetOf(
"application/x-sqlite3",
"application/vnd.ms-access",
)
func DetectCategory(contentType string) string {
if strings.HasPrefix(contentType, "image/") {
return "image"
}
if strings.HasPrefix(contentType, "video/") {
return "video"
}
if strings.HasPrefix(contentType, "audio/") {
return "audio"
}
if strings.Contains(contentType, "font") {
return "font"
}
if contentType == "application/pdf" {
return "document"
}
if archiveMimes.Has(contentType) {
return "archive"
}
if documentMimes.Has(contentType) {
return "document"
}
if spreadsheetMimes.Has(contentType) {
return "spreadsheet"
}
if presentationMimes.Has(contentType) {
return "presentation"
}
if codeMimes.Has(contentType) {
return "code"
}
if databaseMimes.Has(contentType) {
return "database"
}
if strings.HasPrefix(contentType, "text/x-") {
return "code"
}
if strings.HasPrefix(contentType, "text/") {
return "document"
}
return "other"
}
|