diff --git a/.gitignore b/.gitignore deleted file mode 100644 index ee9e3cf..0000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.vite/ - -node_modules \ No newline at end of file diff --git a/fileType.js b/fileType.js deleted file mode 100644 index 5c69710..0000000 --- a/fileType.js +++ /dev/null @@ -1,523 +0,0 @@ -export const SUFFIX_MIME = { - ".aac": "audio/aac", - ".abw": "application/x-abiword", - ".apng": "image/apng", - ".arc": "application/x-freearc", - ".avif": "image/avif", - ".avi": "video/x-msvideo", - ".azw": "application/vnd.amazon.ebook", - ".bin": "application/octet-stream", - ".bmp": "image/bmp", - ".bz": "application/x-bzip", - ".bz2": "application/x-bzip2", - ".cda": "application/x-cdf", - ".csh": "application/x-csh", - ".css": "text/css", - ".csv": "text/csv", - ".doc": "application/msword", - ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - ".eot": "application/vnd.ms-fontobject", - ".epub": "application/epub+zip", - ".gz": "application/gzip", - ".gif": "image/gif", - ".htm": "text/html", - ".ico": "image/vnd.microsoft.icon", - ".ics": "text/calendar", - ".jar": "application/java-archive", - ".jpeg": "image/jpeg", - ".jpg": "image/jpg", - ".js": "text/javascript", - ".json": "application/json", - ".jsonld": "application/ld+json", - ".mid": "audio/midi", - ".mjs": "text/javascript", - ".mp3": "audio/mpeg", - ".mp4": "video/mp4", - ".mpeg": "video/mpeg", - ".mpkg": "application/vnd.apple.installer+xml", - ".odp": "application/vnd.oasis.opendocument.presentation", - ".ods": "application/vnd.oasis.opendocument.spreadsheet", - ".odt": "application/vnd.oasis.opendocument.text", - ".oga": "audio/ogg", - ".ogv": "video/ogg", - ".ogx": "application/ogg", - ".opus": "audio/opus", - ".otf": "font/otf", - ".png": "image/png", - ".pdf": "application/pdf", - ".php": "application/x-httpd-php", - ".ppt": "application/vnd.ms-powerpoint", - ".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation", - ".rar": "application/vnd.rar", - ".rtf": "application/rtf", - ".sh": "application/x-sh", - ".svg": "image/svg+xml", - ".tar": "application/x-tar", - ".tif": "image/tiff", - ".ts": "video/mp2t", - ".ttf": "font/ttf", - ".txt": "text/plain", - ".vsd": "application/vnd.visio", - ".wav": "audio/wav", - ".weba": "audio/webm", - ".webm": "video/webm", - ".webp": "image/webp", - ".woff": "font/woff", - ".woff2": "font/woff2", - ".xhtml": "application/xhtml+xml", - ".xls": "application/vnd.ms-excel", - ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - ".xml": "RFC 7303", - ".xul": "application/vnd.mozilla.xul+xml", - ".zip": "application/zip", - ".3gp": "video/3gpp", - ".3g2": "video/3gpp2", - ".7z": "application/x-7z-compressed" -} - -export const MIME_SUFFIX = { - "audio/aac": ".aac", - "application/x-abiword": ".abw", - "image/apng": ".apng", - "application/x-freearc": ".arc", - "image/avif": ".avif", - "video/x-msvideo": ".avi", - "application/vnd.amazon.ebook": ".azw", - "application/octet-stream": ".bin", - "image/bmp": ".bmp", - "application/x-bzip": ".bz", - "application/x-bzip2": ".bz2", - "application/x-cdf": ".cda", - "application/x-csh": ".csh", - "text/css": ".css", - "text/csv": ".csv", - "application/msword": ".doc", - "application/vnd.openxmlformats-officedocument.wordprocessingml.document": ".docx", - "application/vnd.ms-fontobject": ".eot", - "application/epub+zip": ".epub", - "application/gzip": ".gz", - "image/gif": ".gif", - "text/html": ".htm", - "image/vnd.microsoft.icon": ".ico", - "text/calendar": ".ics", - "application/java-archive": ".jar", - "image/jpeg": ".jpeg", - "text/javascript": ".mjs", - "application/json": ".json", - "application/ld+json": ".jsonld", - "audio/midi": ".mid", - "audio/mpeg": ".mp3", - "video/mp4": ".mp4", - "video/mpeg": ".mpeg", - "application/vnd.apple.installer+xml": ".mpkg", - "application/vnd.oasis.opendocument.presentation": ".odp", - "application/vnd.oasis.opendocument.spreadsheet": ".ods", - "application/vnd.oasis.opendocument.text": ".odt", - "audio/ogg": ".oga", - "video/ogg": ".ogv", - "application/ogg": ".ogx", - "audio/opus": ".opus", - "font/otf": ".otf", - "image/png": ".png", - "application/pdf": ".pdf", - "application/x-httpd-php": ".php", - "application/vnd.ms-powerpoint": ".ppt", - "application/vnd.openxmlformats-officedocument.presentationml.presentation": ".pptx", - "application/vnd.rar": ".rar", - "application/rtf": ".rtf", - "application/x-sh": ".sh", - "image/svg+xml": ".svg", - "application/x-tar": ".tar", - "image/tiff": ".tif", - "video/mp2t": ".ts", - "font/ttf": ".ttf", - "text/plain": ".txt", - "application/vnd.visio": ".vsd", - "audio/wav": ".wav", - "audio/webm": ".weba", - "video/webm": ".webm", - "image/webp": ".webp", - "font/woff": ".woff", - "font/woff2": ".woff2", - "application/xhtml+xml": ".xhtml", - "application/vnd.ms-excel": ".xls", - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": ".xlsx", - "RFC 7303": ".xml", - "application/vnd.mozilla.xul+xml": ".xul", - "application/zip": ".zip", - "video/3gpp": ".3gp", - "video/3gpp2": ".3g2", - "application/x-7z-compressed": ".7z" -} - - -/** -* 弃用。改用统一的Content-Type识别。 -* 暂时保留,因为可能日后需要使用。 -*/ -const MAGIC_NUMBERS = [ - ["7z", [0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C]], - ["aba", [0x00, 0x01, 0x42, 0x41]], - ["abi", [0x41, 0x4F, 0x4C, 0x49, 0x4E, 0x44, 0x45, 0x58]], - ["aby", [0x41, 0x4F, 0x4C, 0x44, 0x42]], - ["accdb", [0x00, 0x01, 0x00, 0x00, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x20, 0x41, 0x43, 0x45, 0x20, 0x44, 0x42]], - ["ACM", [0x4D, 0x5A]], - ["ADF", [0x44, 0x4F, 0x53]], - ["adx", [0x03, 0x00, 0x00, 0x00, 0x41, 0x50, 0x50, 0x52]], - ["AIFF", [0x46, 0x4F, 0x52, 0x4D, 0x00]], - ["ain", [0x21, 0x12]], - ["ami", [0x5B, 0x76, 0x65, 0x72, 0x5D]], - ["amr", [0x23, 0x21, 0x41, 0x4D, 0x52]], - ["ANI", [0x52, 0x49, 0x46, 0x46]], - ["API", [0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00]], - ["arc", [0x41, 0x72, 0x43, 0x01]], - ["arj", [0x60, 0xEA]], - ["ARJ", [0x60, 0xEA, 0x27]], - ["ART", [0x4A, 0x47, 0x03, 0x0E, 0x00, 0x00, 0x00]], - ["ART", [0x4A, 0x47, 0x04, 0x0E, 0x00, 0x00, 0x00]], - ["asf", [0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11]], - ["asf", [0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9, 0x00, 0xAA, 0x00, 0x62, 0xCE, 0x6C]], - ["asx", [0x3C]], - ["au", [0x2E, 0x73, 0x6E, 0x64]], - ["avi", [0x41, 0x56, 0x49, 0x20]], - ["AX", [0x4D, 0x5A]], - ["AX", [0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00]], - ["bag", [0x41, 0x4F, 0x4C, 0x20, 0x46, 0x65, 0x65, 0x64, 0x62, 0x61, 0x67]], - ["BAS", [0x20, 0x20, 0x20]], - ["bin", [0x42, 0x4C, 0x49, 0x32, 0x32, 0x33, 0x51]], - ["bmp", [0x42, 0x4D]], - ["BMP", [0x42, 0x4D, 0x3E]], - ["bz", [0x42, 0x5A, 0x68]], - ["BZ2", [0x42, 0x5A, 0x68]], - ["CAB", [0x49, 0x53, 0x63]], - ["CAB", [0x49, 0x53, 0x63, 0x28]], - ["CAB", [0x4D, 0x53, 0x43, 0x46]], - ["cat", [0x30]], - ["CBD", [0x43, 0x42, 0x46, 0x49, 0x4C, 0x45]], - ["CCD", [0x5B, 0x43, 0x6C]], - ["CDR", [0x45, 0x4C, 0x49, 0x54, 0x45, 0x20, 0x43, 0x6F, 0x6D, 0x6D, 0x61, 0x6E, 0x64, 0x65, 0x72, 0x20]], - ["CDR", [0x4D, 0x53, 0x5F, 0x56, 0x4F, 0x49, 0x43, 0x45]], - ["CHI", [0x49, 0x54, 0x53, 0x46]], - ["CHM", [0x49, 0x54, 0x53]], - ["CLB", [0x43, 0x4D, 0x58, 0x31]], - ["CLB", [0x43, 0x4F, 0x4D, 0x2B]], - ["cnt", [0x3A, 0x42, 0x61, 0x73, 0x65]], - ["COM", [0x4D, 0x5A]], - ["COM", [0x4D, 0x5A, 0xEE]], - ["COM", [0xE9, 0x3B, 0x03]], - ["CPE", [0x46, 0x41, 0x58, 0x43, 0x4F, 0x56, 0x45, 0x52, 0x2D, 0x56, 0x45, 0x52]], - ["CPL", [0x4D, 0x5A]], - ["CPT", [0x43, 0x50, 0x54, 0x37, 0x46, 0x49, 0x4C, 0x45]], - ["CPT", [0x43, 0x50, 0x54, 0x46, 0x49, 0x4C, 0x45]], - ["CPX", [0x5B, 0x57, 0x69]], - ["cru", [0x43, 0x52, 0x55, 0x53, 0x48]], - ["CRU", [0x43, 0x52, 0x55, 0x53, 0x48, 0x20, 0x76]], - ["CRW", [0x49, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x48, 0x45, 0x41, 0x50, 0x43, 0x43, 0x44, 0x52, 0x02, 0x00]], - ["CTF", [0x43, 0x61, 0x74, 0x61, 0x6C, 0x6F, 0x67, 0x20, 0x33, 0x2E, 0x30, 0x30, 0x00]], - ["CUR", [0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x20, 0x20]], - ["dat", [0x03]], - ["dat", [0x1A, 0x52, 0x54, 0x53, 0x20, 0x43, 0x4F, 0x4D, 0x50, 0x52, 0x45, 0x53, 0x53, 0x45, 0x44, 0x20, 0x49, 0x4D, 0x41, 0x47, 0x45, 0x20, 0x56, 0x31, 0x2E, 0x30, 0x1A]], - ["dat", [0x41, 0x56, 0x47, 0x36, 0x5F, 0x49, 0x6E, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x5F, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65]], - ["DAT", [0x43, 0x52, 0x45, 0x47]], - ["DAT", [0x43, 0x6C, 0x69, 0x65, 0x6E, 0x74, 0x20, 0x55, 0x72, 0x6C, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x4D, 0x4D, 0x46, 0x20, 0x56, 0x65, 0x72, 0x20]], - ["DAT", [0x45, 0x52, 0x46, 0x53, 0x53, 0x41, 0x56, 0x45, 0x44, 0x41, 0x54, 0x41, 0x46, 0x49, 0x4C, 0x45]], - ["DAT", [0x49, 0x6E, 0x6E, 0x6F, 0x20, 0x53, 0x65, 0x74, 0x75, 0x70, 0x20, 0x55, 0x6E, 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6C, 0x6C, 0x20, 0x4C, 0x6F, 0x67, 0x20, 0x28, 0x62, 0x29]], - ["db", [0x00, 0x06, 0x15, 0x61, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0xD2, 0x00, 0x00, 0x10, 0x00]], - ["DB", [0x44, 0x42, 0x46, 0x48]], - ["db", [0x08]], - ["db3", [0x03]], - ["db4", [0x04]], - ["dba", [0x00, 0x01, 0x42, 0x44]], - ["dbx", [0xCF, 0xAD, 0x12, 0xFE]], - ["dbx", [0xCF, 0xAD, 0x12, 0xFE, 0xC5, 0xFD, 0x74, 0x6F]], - ["dci", [0x3C, 0x21, 0x64, 0x6F, 0x63, 0x74, 0x79, 0x70]], - ["dcx", [0x3A, 0xDE, 0x68, 0xB1]], - ["DDB", [0x00, 0x01, 0x00]], - ["dib", [0x42, 0x4D]], - ["DLL", [0x4D, 0x5A, 0x90]], - ["DMP", [0x4D, 0x44, 0x4D, 0x50, 0x93, 0xA7]], - ["DMS", [0x44, 0x4D, 0x53, 0x21]], - ["doc", [0x0D, 0x44, 0x4F, 0x43]], - ["doc", [0x12, 0x34, 0x56, 0x78, 0x90, 0xFF]], - ["doc", [0x31, 0xBE, 0x00, 0x00, 0x00, 0xAB, 0x00, 0x00]], - ["doc", [0x7F, 0xFE, 0x34, 0x0A]], - ["DPL", [0x4D, 0x5A, 0x50]], - ["DRV", [0x4D, 0x5A, 0x16]], - ["drw", [0x07]], - ["drw", [0x01, 0xFF, 0x02, 0x04, 0x03, 0x02]], - ["ds4", [0x4D, 0x47, 0x58, 0x20, 0x69, 0x74, 0x70, 0x64]], - ["DSN", [0x4D, 0x56]], - ["dss", [0x02, 0x64, 0x73, 0x73]], - ["dtd", [0x07, 0x64, 0x74, 0x32, 0x64, 0x64, 0x74, 0x64]], - ["dtd", [0x3C, 0x21, 0x45, 0x4E, 0x54, 0x49, 0x54, 0x59]], - ["DVR", [0x44, 0x56, 0x44]], - ["dwg", [0x41, 0x43, 0x31]], - ["dwg", [0x41, 0x43, 0x31, 0x30]], - ["ECO", [0x2A, 0x50, 0x52]], - ["elf", [0x7F, 0x45, 0x4C, 0x46, 0x01, 0x01, 0x01, 0x00]], - ["emf", [0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00]], - ["eml", [0x44, 0x65, 0x6C, 0x69, 0x76, 0x65, 0x72, 0x79, 0x2D, 0x64, 0x61, 0x74, 0x65, 0x3A]], - ["EML", [0x46, 0x72, 0x6F, 0x6D, 0x20, 0x20, 0x20]], - ["EML", [0x46, 0x72, 0x6F, 0x6D, 0x20, 0x3F, 0x3F, 0x3F]], - ["EML", [0x46, 0x72, 0x6F, 0x6D, 0x3A, 0x20]], - ["EML", [0x52, 0x65, 0x63]], - ["enc", [0x00, 0x5C, 0x41, 0xB1, 0xFF]], - ["enl", [0x40, 0x40, 0x40, 0x20, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40]], - ["eps", [0x25, 0x21, 0x50, 0x53]], - ["eps", [0x25, 0x21, 0x50, 0x53, 0x2D, 0x41, 0x64, 0x6F, 0x62, 0x65]], - ["eps", [0x25, 0x21, 0x50, 0x53, 0x2D, 0x41, 0x64, 0x6F, 0x62, 0x65, 0x2D, 0x33, 0x2E, 0x30, 0x20, 0x45, 0x50, 0x53, 0x46, 0x2D, 0x33, 0x20, 0x30]], - ["EPS", [0xC5, 0xD0, 0xD3]], - ["eth", [0x1A, 0x35, 0x01, 0x00]], - ["evt", [0x30, 0x00, 0x00, 0x00, 0x4C, 0x66, 0x4C, 0x65]], - ["evt", [0x03, 0x00, 0x00, 0x00, 0xC4, 0x66, 0xC4, 0x56]], - ["EVTX", [0x45, 0x6C, 0x66, 0x46, 0x69, 0x6C, 0x65, 0x00]], - ["fli", [0x00, 0x11, 0xAF]], - ["flt", [0x00, 0x01, 0x01]], - ["FLT", [0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00]], - ["FLV", [0x46, 0x4C, 0x56, 0x01]], - ["fm", [0x3C, 0x4D, 0x61, 0x6B, 0x65, 0x72, 0x46, 0x69, 0x6C, 0x65, 0x20]], - ["fm3", [0x00, 0x00, 0x1A, 0x00, 0x07, 0x80, 0x01, 0x00]], - ["fmt", [0x20, 0x00, 0x68, 0x00, 0x20, 0]], - ["FNT", [0x43, 0x48, 0x41]], - ["FON", [0x4D, 0x5A]], - ["GBC", [0x87, 0xF5, 0x3E]], - ["gid", [0x3F, 0x5F, 0x03, 0x00]], - ["GID", [0x4C, 0x4E, 0x02, 0x00]], - ["GIF", [0x47, 0x49, 0x46, 0x38]], - ["gif", [0x47, 0x49, 0x46, 0x38, 0x37, 0x61]], - ["gif", [0x47, 0x49, 0x46, 0x38, 0x39, 0x61]], - ["GTD", [0x7B, 0x50, 0x72]], - ["GX2", [0x47, 0x58, 0x32]], - ["gz", [0x1F, 0x8B]], - ["gz", [0x1F, 0x8B, 0x08]], - ["hap", [0x91, 0x33, 0x48, 0x46]], - ["HDMP", [0x4D, 0x44, 0x4D, 0x50, 0x93, 0xA7]], - ["hdr", [0x23, 0x3F, 0x52, 0x41, 0x44, 0x49, 0x41, 0x4E, 0x43, 0x45, 0x0A]], - ["HLP", [0x3F, 0x5F, 0x03]], - ["hlp", [0x3F, 0x5F, 0x03, 0x00]], - ["HLP", [0x4C, 0x4E, 0x02, 0x00]], - ["hlp", [0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF]], - ["hqx", [0x28, 0x54, 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x6C, 0x65]], - ["hqx", [0x28, 0x54, 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x6C, 0x65, 0x20, 0x6D, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x42, 0x69, 0x6E, 0x48, 0x65, 0x78, 0x20]], - ["HTM", [0x3C, 0x21, 0x44]], - ["htm", [0x3C, 0x21, 0x44, 0x4F, 0x43, 0x54]], - ["htm", [0x3C, 0x48, 0x54, 0x4D, 0x4C, 0x3E]], - ["htm", [0x3C, 0x68, 0x74, 0x6D, 0x6C, 0x3E]], - ["html", [0x68, 0x74, 0x6D, 0x6C, 0x3E]], - ["ico", [0x00, 0x00, 0x01, 0x00, 0x00]], - ["ico", [0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x20, 0x20]], - ["IFF", [0x46, 0x4F, 0x52, 0x4D]], - ["IFO", [0x44, 0x56, 0x44]], - ["IME", [0x4D, 0x5A, 0x90]], - ["img", [0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x01, 0x01]], - ["IMG", [0x00, 0xFF, 0xFF]], - ["IMM", [0x4D, 0x5A, 0x90]], - ["ind", [0x41, 0x4F, 0x4C, 0x49, 0x44, 0x58]], - ["ISO", [0x43, 0x44, 0x30, 0x30, 0x31]], - ["ivr", [0x2E, 0x52, 0x45, 0x43]], - ["JAR", [0x4A, 0x41, 0x52, 0x43, 0x53, 0x00]], - ["jar", [0x5F, 0x27, 0xA8, 0x89]], - ["jpg", [0xFF, 0xD8, 0xFF]], - ["KGB", [0x4B, 0x47, 0x42, 0x5F, 0x61, 0x72, 0x63, 0x68, 0x20, 0x2D]], - ["KOZ", [0x49, 0x44, 0x33, 0x03, 0x00, 0x00, 0x00]], - ["LDB", [0x42, 0x49, 0x4C]], - ["LHP", [0x3F, 0x5F, 0x03]], - ["lhp", [0x3F, 0x5F, 0x03, 0x00]], - ["lib", [0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E, 0x0A]], - ["LIB", [0x2A, 0x24, 0x20]], - ["LIT", [0x49, 0x54, 0x4F, 0x4C, 0x49, 0x54, 0x4C, 0x53]], - ["LNK", [0x4C, 0x00, 0x00]], - ["lnk", [0x4C, 0x00, 0x00, 0x00]], - ["lnk", [0x4C, 0x00, 0x00, 0x00, 0x01, 0x14, 0x02]], - ["LNK", [0x4C, 0x00, 0x00, 0x00, 0x01, 0x14, 0x02, 0x00]], - ["log", [0x2A, 0x2A, 0x2A, 0x20, 0x20, 0x49, 0x6E, 0x73, 0x74, 0x61, 0x6C, 0x6C, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x20]], - ["lzh", ["lh"]], - ["lwp", [0x57, 0x6F, 0x72, 0x64, 0x50, 0x72, 0x6F]], - ["m3u", [0x23, 0x45, 0x58]], - ["m4a", [0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41, 0x20, 0x00, 0x00, 0x00, 0x00]], - ["manifest", [0x3C, 0x3F, 0x78, 0x6D, 0x6C, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x3D]], - ["MAR", [0x4D, 0x41, 0x52, 0x31, 0x00]], - ["MAR", [0x4D, 0x41, 0x52, 0x43]], - ["MAR", [0x4D, 0x41, 0x72, 0x30, 0x00]], - ["max", [0xD0, 0xCF, 0x11]], - ["mdb", [0x00, 0x01, 0x00, 0x00, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x20, 0x4A, 0x65, 0x74, 0x20, 0x44, 0x42]], - ["mdb", [0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x20, 0x4A]], - ["MDF", [0x00, 0xFF, 0xFF]], - ["mdf", [0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0x00, 0x01]], - ["mdf", [0x01, 0x0F, 0x00, 0x00]], - ["MDI", [0x45, 0x50]], - ["MDS", [0x4D, 0x45, 0x44]], - ["MID", [0x4D, 0x54, 0x68, 0x64]], - ["mkv", [0x1A, 0x45, 0xDF, 0xA3, 0x93, 0x42, 0x82, 0x88, 0x6D, 0x61, 0x74, 0x72, 0x6F, 0x73, 0x6B, 0x61]], - ["MLS", [0x4D, 0x49, 0x4C, 0x45, 0x53]], - ["MLS", [0x4D, 0x4C, 0x53, 0x57]], - ["MLS", [0x4D, 0x56, 0x32, 0x31, 0x34]], - ["MLS", [0x4D, 0x56, 0x32, 0x43]], - ["MMF", [0x4D, 0x4D, 0x4D, 0x44, 0x00, 0x00]], - ["mny", [0x00, 0x01, 0x00, 0x00, 0x4D, 0x53, 0x49, 0x53, 0x41, 0x4D, 0x20, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65]], - ["MOV", [0x00, 0x00, 0x0F]], - ["MOV", [0x00, 0x00, 0x77]], - ["mov", [0x6D, 0x6F, 0x6F, 0x76]], - ["mov", [0x6D, 0x64, 0x61, 0x74]], - ["mp", [0x0C, 0xED]], - ["MP3", [0x49, 0x44, 0x33]], - ["MP3", [0xFF, 0xFB, 0x50]], - ["mp4", [0x00, 0x00, 0x00, 0x18, 0x66, 0x74, 0x79, 0x70, 0x33, 0x67, 0x70, 0x35]], - ["MPA", [0x00, 0x00, 0x01]], - ["mpg", [0x00, 0x00, 0x01, 0xB3]], - ["mpg", [0x00, 0x00, 0x01, 0xBA]], - ["MSC", [0x3C, 0x3F, 0x78]], - ["msc", [0x3C, 0x3F, 0x78, 0x6D, 0x6C, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x3D, 0x22, 0x31, 0x2E, 0x30, 0x22, 0x3F, 0x3E, 0x0D, 0x0A, 0x3C, 0x4D, 0x4D, 0x43, 0x5F, 0x43, 0x6F, 0x6E, 0x73, 0x6F, 0x6C, 0x65, 0x46, 0x69, 0x6C, 0x65, 0x20, 0x43, 0x6F, 0x6E, 0x73, 0x6F, 0x6C, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x3D, 0x22]], - ["msi", [0x23, 0x20]], - ["MSV", [0x4D, 0x53, 0x5F, 0x56, 0x4F, 0x49, 0x43, 0x45]], - ["NES", [0x4E, 0x45, 0x53]], - ["NLS", [0xC2, 0x20, 0x20]], - ["nri", [0x0E, 0x4E, 0x65, 0x72, 0x6F, 0x49, 0x53, 0x4F]], - ["ntf", [0x1A, 0x00, 0x00]], - ["nsf", [0x1A, 0x00, 0x00, 0x03, 0x00, 0x00]], - ["nsf", [0x1A, 0x00, 0x00, 0x03, 0x00, 0x00, 0x11, 0x00]], - ["nsf", [0x1A, 0x00, 0x00, 0x04, 0x00, 0x00]], - ["ntf", [0x30, 0x31, 0x4F, 0x52, 0x44, 0x4E, 0x41, 0x4E, 0x43, 0x45, 0x20, 0x53, 0x55, 0x52, 0x56, 0x45, 0x59, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20]], - ["obj", [0x4C, 0x01]], - ["OCX", [0x4D, 0x5A]], - ["OCX", [0x4D, 0x5A, 0x90]], - ["OLB", [0x4D, 0x5A]], - ["OLB", [0x4D, 0x5A, 0x90]], - ["org", [0x41, 0x4F, 0x4C, 0x56, 0x4D, 0x31, 0x30, 0x30]], - ["pak", [0x1A, 0x0B]], - ["PAT", [0x47, 0x46, 0x31, 0x50, 0x41, 0x54, 0x43, 0x48]], - ["PAT", [0x47, 0x50, 0x41, 0x54]], - ["PBK", [0x5B, 0x41, 0x44]], - ["PCB", [0x17, 0xA1, 0x50]], - ["PCS", [0x0A, 0x05, 0x01]], - ["pcx", [0x0A, 0x05, 0x01, 0x08]], - ["PDF", [0x25, 0x50, 0x44]], - ["pdf", [0x25, 0x50, 0x44, 0x46, 0x2D, 0x31, 0x2E]], - ["PDG", [0x48, 0x48, 0x02]], - ["pf", [0x11, 0x00, 0x00, 0x00, 0x53, 0x43, 0x43, 0x41]], - ["pic", [0x01, 0x00, 0x00, 0x00, 0x01]], - ["PJT", [0x00, 0x00, 0x07]], - ["PLL", [0x24, 0x53, 0x6F]], - ["PNG", [0x89, 0x50, 0x4E]], - ["PNG", [0x89, 0x50, 0x4E, 0x47]], - ["png", [0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A]], - ["png", [0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A]], - ["PPC", [0x52, 0x65, 0x63]], - ["PPT", [0xD0, 0xCF, 0x11]], - ["ppt", [0x00, 0x6E, 0x1E, 0xF0]], - ["ppt", [0x0F, 0x00, 0xE8, 0x03]], - ["PPZ", [0x4D, 0x53, 0x43, 0x46]], - ["prc", [0x42, 0x4F, 0x4F, 0x4B, 0x4D, 0x4F, 0x42, 0x49]], - ["PRG", [0x23, 0x44, 0x45]], - ["ps", [0x25, 0x21, 0x50, 0x53, 0x2D, 0x41, 0x64, 0x6F, 0x62, 0x65]], - ["PSD", [0x38, 0x42, 0x50]], - ["psd", [0x38, 0x42, 0x50, 0x53]], - ["psp", [0x7E, 0x42, 0x4B, 0x00]], - ["pst", [0x21, 0x42, 0x44, 0x4E]], - ["pwl", [0xE3, 0x82, 0x85, 0x96]], - ["qbb", [0x45, 0x86, 0x00, 0x00, 0x06, 0x00]], - ["qdf", [0xAC, 0x9E, 0xBD, 0x8F]], - ["qph", [0x03, 0x00, 0x00, 0x00]], - ["qt", [0x6D, 0x64, 0x61, 0x74]], - ["qxd", [0x00, 0x00, 0x49, 0x49, 0x58, 0x50, 0x52]], - ["qxd", [0x00, 0x00, 0x4D, 0x4D, 0x58, 0x50, 0x52]], - ["ra", [0x2E, 0x52, 0x4D, 0x46, 0x00, 0x00, 0x00, 0x12, 0x00]], - ["ra", [0x2E, 0x72, 0x61, 0xFD]], - ["ra", [0x2E, 0x72, 0x61, 0xFD, 0x00]], - ["RAR", [0x52, 0x61, 0x72]], - ["rar", [0x52, 0x61, 0x72, 0x21]], - ["RAW", [0x06, 0x05, 0x00]], - ["reg", [0x52, 0x45, 0x47, 0x45, 0x44, 0x49, 0x54, 0x34]], - ["rgb", [0x01, 0xDA, 0x01, 0x01, 0x00, 0x03]], - ["RM", [0x2E, 0x52, 0x4D]], - ["rm", [0x2E, 0x52, 0x4D, 0x46]], - ["rpm", [0xED, 0xAB, 0xEE, 0xDB]], - ["RTD", [0x43, 0x23, 0x2B, 0x44, 0xA4, 0x43, 0x4D, 0xA5, 0x48, 0x64, 0x72]], - ["RTF", [0x7B, 0x5C, 0x72]], - ["rtf", [0x7B, 0x5C, 0x72, 0x74, 0x66]], - ["sav", [0x24, 0x46, 0x4C, 0x32, 0x40, 0x28, 0x23, 0x29, 0x20, 0x53, 0x50, 0x53, 0x53, 0x20, 0x44, 0x41, 0x54, 0x41, 0x20, 0x46, 0x49, 0x4C, 0x45]], - ["SBV", [0x46, 0x45, 0x44, 0x46]], - ["SCH", [0x2A, 0x76, 0x65]], - ["scm", [0x80, 0x53, 0x43]], - ["SH3", [0x48, 0x48, 0x47, 0x42, 0x31]], - ["SHD", [0x4B, 0x49, 0x00, 0x00]], - ["sit", [0x53, 0x49, 0x54, 0x21]], - ["sit", [0x53, 0x74, 0x75, 0x66, 0x66, 0x49, 0x74]], - ["sle", [0x3A, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4F, 0x4E]], - ["sle", [0x41, 0x43, 0x76]], - ["sly", [0x53, 0x52, 0x01, 0x00]], - ["SMD", [0x00, 0xFF, 0xFF]], - ["snm", [0x00, 0x1E, 0x84, 0x90, 0x00, 0x00, 0x00, 0x00]], - ["SNP", [0x4D, 0x53, 0x43, 0x46]], - ["sol", [0x00, 0xBF]], - ["spl", [0x00, 0x00, 0x01, 0x00]], - ["SCR", [0x4D, 0x5A]], - ["SUB", [0xFF, 0xFF, 0xFF]], - ["SWF", [0x43, 0x57, 0x53]], - ["SWF", [0x46, 0x57, 0x53]], - ["syw", [0x41, 0x4D, 0x59, 0x4F]], - ["TAG", [0x00, 0x00, 0x02]], - ["tar", [0x30, 0x37, 0x30, 0x37, 0x30, 0x37]], - ["tga", [0x00, 0x00, 0x10, 0x00, 0x00]], - ["TGA", [0x00, 0x00, 0x02]], - ["tga", [0x00, 0x00, 0x02, 0x00, 0x00]], - ["TIF", [0x49, 0x20, 0x49]], - ["tif", [0x49, 0x49, 0x2A]], - ["tif", [0x49, 0x49, 0x2A, 0x00]], - ["TIF", [0x4D, 0x4D, 0x00, 0x2A]], - ["tif", [0x4D, 0x4D, 0x2A]], - ["TIF", [0x4D, 0x4D, 0x00, 0x2B]], - ["TLB", [0x4D, 0x53, 0x46, 0x54, 0x02, 0x00, 0x01, 0x00]], - ["tr1", [0x01, 0x10]], - ["TST", [0x00, 0x01, 0x00]], - ["TTF", [0x00, 0x01, 0x00]], - ["ufa", [0x55, 0x46, 0x41]], - ["VBX", [0x4D, 0x5A]], - ["VCD", [0x45, 0x4E, 0x54, 0x52, 0x59, 0x56, 0x43, 0x44, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x18, 0x58]], - ["vcf", [0x42, 0x45, 0x47, 0x49, 0x4E, 0x3A, 0x56, 0x43, 0x41, 0x52, 0x44, 0x0D, 0x0A]], - ["vob", [0x00, 0x00, 0x01, 0xBA]], - ["WAV", [0x52, 0x49, 0x46]], - ["wav", [0x57, 0x41, 0x56, 0x45]], - ["wav", [0x57, 0x41, 0x56, 0x45, 0x66, 0x6D, 0x74]], - ["wb2", [0x00, 0x00, 0x02, 0x00]], - ["wb3", [0x3E, 0x00, 0x03, 0x00, 0xFE, 0xFF, 0x09, 0x00, 0x06]], - ["wk1", [0x20, 0x00, 0x60, 0x40, 0x60]], - ["wk1", [0x00, 0x00, 0x02, 0x00, 0x06, 0x04, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00]], - ["wk3", [0x00, 0x00, 0x1A, 0x00, 0x00, 0x10, 0x04, 0x00]], - ["wk4", [0x00, 0x00, 0x1A, 0x00, 0x02, 0x10, 0x04, 0x00]], - ["wks", [0x0E, 0x57, 0x4B, 0x53]], - ["WMA", [0x30, 0x26, 0xB2]], - ["wmf", [0x01, 0x00, 0x09, 0x00]], - ["wmf", [0x01, 0x00, 0x09, 0x00, 0x00, 0x03]], - ["wmf", [0x02, 0x00, 0x09, 0x00]], - ["wmf", [0xD7, 0xCD, 0xC6, 0x9A]], - ["WMV", [0x30, 0x26, 0xB2]], - ["wp", [0xFF, 0x57, 0x50, 0x43]], - ["wpd", [0xFF, 0x57, 0x50, 0x43]], - ["wpg", [0xFF, 0x57, 0x50, 0x47]], - ["wri", [0x31, 0xBE]], - ["WRI", [0x31, 0xBE, 0x00]], - ["wri", [0x32, 0xBE]], - ["ws", [0x1D, 0x7D]], - ["XBE", [0x58, 0x42, 0x45]], - ["xdr", [0x3C]], - ["xls", [0x09, 0x02, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0xB9, 0x04, 0x5C, 0x00]], - ["xls", [0x09, 0x04, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0xF6, 0x05, 0x5C, 0x00]], - ["XLS", [0xD0, 0xCF, 0x11]], - ["xls", [0xD0, 0xCF, 0x11, 0xE0]], - ["xls", [0x09, 0x08, 0x10, 0x00, 0x00, 0x06, 0x05, 0x00]], - ["XML", [0x3C, 0x3F, 0x78]], - ["xml", [0x3C, 0x3F, 0x78, 0x6D, 0x6C]], - ["xml", [0xFF, 0xFE, 0x3C, 0x00, 0x52, 0x00, 0x4F, 0x00, 0x4F, 0x00, 0x54, 0x00, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x42, 0x00]], - ["XMV", [0x00, 0x50, 0x01]], - ["XSL", [0xFF, 0xFE, 0x3C]], - ["xul", [0x72, 0x73, 0x69, 0x6F, 0x6E, 0x3D, 0x22, 0x31, 0x3C, 0x3F, 0x78, 0x6D, 0x6C, 0x20, 0x76, 0x65, 0x2E, 0x30, 0x22, 0x3F, 0x3E]], - ["z", [0x1F, 0x9D]], - ["Z", [0x1F, 0x9D, 0x8C]], - ["ZIP", [0x50, 0x4B, 0x03]], - ["zip", [0x50, 0x4B, 0x03, 0x04]], - ["zip", [0x50, 0x4B, 0x30, 0x30]], - ["Zip", [0x50, 0x4B, 0x30, 0x30, 0x50, 0x4B, 0x03, 0x04]], - ["zoo", [0x5A, 0x4F, 0x4F, 0x20]] -] - diff --git a/hash.js b/hash.js deleted file mode 100644 index a76485e..0000000 --- a/hash.js +++ /dev/null @@ -1,123 +0,0 @@ -import {MIME_SUFFIX, SUFFIX_MIME} from './fileType.js' - -/** - * @param {ReadableStream} reader - */ -export async function* ReadStramByChunk(reader) { - let {done, value} = await reader.read(); - while(!done){ - yield value; - ({done, value} = await reader.read()); - } -} - -/** - * @param {string} MIME - */ -function MIME2Suffix(MIME){ - return MIME_SUFFIX[MIME] ?? ""; -} - -/** - * @param {string} suf - */ -function suffix2MIME(suf){ - return SUFFIX_MIME[suf] ?? "application/octet-stream"; -} - -/** - * 智能fetch - * @param {RequestInfo | URL} url url - * @param {(url: string, MIME: string) => string} nameGetter 获取名字的函数 - * @param {(chunk: Uint8Array) => void} hook 接收chunk时调用 - * @param {RequestInit | undefined} init init - * @returns file - */ -export async function FetchFile(url, nameGetter, hook, init){ - const res = await fetch(url, init); - if(!res.ok){ - throw new Error(await res.text()); - } - - let content = []; - for await (let chunk of ReadStramByChunk(res.body.getReader())){ - hook(chunk); - content.push(chunk); - } - - const type = res.headers.get("Content-Type"); - const name = nameGetter(url, type); - return new File(content, name, { - type, - }); -} - -/** - * - * @param {string} hash - * @param {(chunk: Uint8Array) => void} hook - * @returns - */ -export async function getFileByHash(hash, hook=(()=>{})){ - return FetchFile( - `//static.dao3.fun/block/${hash}`, - (url, MIME) => `${hash}${MIME2Suffix(MIME)}`, - hook - ) -} - -export async function post(data, MIME) { - const postResult = await fetch("//static.dao3.fun/block/", { - method: "POST", - headers: { - "Content-Type": MIME, - }, - body: data, - mode: "cors" - }); - const resultData = await postResult.json(); - return resultData; -} - -export async function postText(data){ - return post(data, "text/plain"); -} - -/** - * - * @param {File} file - * @param {(ev: ProgressEvent) => void} hook - */ -export async function postFile(file, hook){ - const MIME = suffix2MIME('.'+file.name.split('.').at(-1)); - const reader = new FileReader(); - return new Promise((res, rej)=>{ - reader.addEventListener("load", async function(){ - const data = reader.result - res(await post(data, MIME)); - }) - reader.addEventListener("error", async function(e){ - rej(e); - }) - reader.addEventListener("progress", hook); - reader.readAsArrayBuffer(file); - }) -} - -// function postFile() { -// const input = document.getElementById("file"); -// const file = input.files[0]; -// const reader = new FileReader(); -// reader.onload = async function () { -// const data = reader.result; -// await post(data); -// }; -// reader.readAsText(file); -// }; -// async function postText() { -// const text = document.getElementById("text"); -// const data = text.value; -// if (data.length === 0) return; -// await post(data); -// text.value = ""; -// } \ No newline at end of file diff --git a/index.html b/index.html index f9a6af6..194c475 100644 --- a/index.html +++ b/index.html @@ -4,17 +4,22 @@ + Dao3 Static Helper -

Dao3 Static 工具

- - - - -
-

上传文本

-
-

输入文本:

- - -
-

-
- - - - +

+ \ No newline at end of file diff --git a/index.js b/index.js deleted file mode 100644 index e3f04cd..0000000 --- a/index.js +++ /dev/null @@ -1,110 +0,0 @@ -import { getFileByHash, postFile, postText } from "./hash"; - -//hello world: QmWDXASJ7wW316RRQi57fSXTscfnZ7vN2mJXVkXE8t5m5a -//an image: QmeXTsiLfsZ3zskcMtA4D4nXMAKjBZ7CmNj8WLWQ6nSUrs - -// 读取Hash -; (async function () { - let inputEl = document.getElementById("readHash"); - let tipEl = document.querySelector(".read .tip"); - let previewEl = document.querySelector(".read .preview .frame"); - let inputFormEl = document.getElementById("readHashForm"); - - let fileName = null; - let url = null; - - inputFormEl?.addEventListener("submit", async (ev) => { - // 防止刷新 - ev.preventDefault(); - // 数据总量 - let byteNum = 0; - // 提示 - tipEl.innerText = "正在启动传输……"; - try { - let file = await getFileByHash(inputEl.value, (chunk) => { - byteNum += chunk.length; - tipEl.innerText = `已接收${byteNum}字节……`; - }); - tipEl.innerText = `传输完毕!大小:${file.size}字节,文件类型:${file.type}`; - - fileName = file.name; - url = URL.createObjectURL(file); - // 预览 - previewEl.src = url; - } catch (e) { - tipEl.innerText = `传输失败!${e}`; - } - }); - - let openBtn = document.getElementById("open"); - openBtn?.addEventListener("click", () => { - open(`//static.dao3.fun/block/${inputEl.value}`, "_blank"); - }); - - let downloadBtn = document.getElementById("download"); - downloadBtn?.addEventListener("click", async () => { - if (!url || !fileName) { - inputEl.submit(); - } - let a = document.createElement('a'); - a.href = url; - a.download = fileName; - a.click(); - }); -})(); - -// 上传文本 -; (async function () { - let inputEl = document.getElementById("postText"); - let tipEl = document.querySelector(".postText .tip"); - let inputFormEl = document.getElementById("postTextForm"); - - inputFormEl?.addEventListener("submit", async (ev) => { - ev.preventDefault(); - tipEl.innerText = "正在启动传输……"; - let res = await postText(inputEl.value); - tipEl.innerText = `传输成功!${JSON.stringify(res)}`; - }); -})(); - -// 上传文件 -; (async function () { - let inputEl = document.getElementById("postFile"); - let tipEl = document.querySelector(".postFile .tip"); - let inputFormEl = document.getElementById("postFileForm"); - - inputFormEl?.addEventListener("submit", async (ev) => { - ev.preventDefault(); - tipEl.innerText = "传输中……"; - try { - const file = inputEl.files[0]; - if (!file.name) { - tipEl.innerText = "请选择文件"; - return; - } - - const size = file.size; - const res = await postFile(file, (ev) => { - tipEl.innerText = `[${((size - ev.loaded) / size * 100).toFixed(0)}%] 共${size}字节,已传输${ev.loaded}字节`; - }); - tipEl.innerText = `传输成功!${JSON.stringify(res)}`; - } catch (e) { - tipEl.innerText = `错误:${e}`; - } - }); -})(); - -; (async function () { - let previews = document.querySelectorAll(".preview"); - previews.forEach((preview) => { - let btn = preview.querySelector(".change-preview-vis"); - let frame = preview.querySelector(".frame"); - btn.addEventListener("click", () => { - if (frame.classList.contains("hidden")) { - frame.classList.remove("hidden"); - } else { - frame.classList.add("hidden"); - } - }); - }); -})(); \ No newline at end of file diff --git a/style.css b/style.css deleted file mode 100644 index f11cd04..0000000 --- a/style.css +++ /dev/null @@ -1,50 +0,0 @@ -:root{ - --main-color: #336699; -} - -form *{ - margin: 3px; -} - -.menu{ - border: 1px solid var(--main-color); - border-radius: 5px; - padding: 5px; - margin: 10px; -} - -#readHashForm{ - display: flex; - align-items: center; -} - -#postTextForm{ - display: flex; - flex-direction: column; - align-items: flex-start; -} - -#postTextForm textarea{ - width: 50%; - height: 20vh; -} - -.preview{ - margin: 3px; -} - -.hidden{ - display: none; -} - -.flex-column{ - display: flex; - flex-direction: column; - align-items: flex-start; -} - -.flex-row{ - display: flex; - flex-direction: row; - align-items: flex-start; -} \ No newline at end of file