对于较旧的*.doc文档,这就足够了:
header("Content-Type: application/msword");我应该为新的.docx文档使用哪种MIME类型?另外,对于pptx和xlsx文档?
发布于 2018-12-07 09:01:48
这篇文章将探索在各种编程语言中获取MIME类型的各种方法,并将它们的缺点用一行描述作为标题。因此,相应地使用它们,并使用对您有效的方法。
例如。当用户可以提供.xls、.xlsx或.xlsm中的任何一个,而您不想编写代码测试扩展并为它们提供MIME类型时,下面的代码特别有用。让系统来完成这项工作。
Python 3
>>> pip install python-magic
>>> import magic
>>> magic.from_file("Employee.pdf", mime=True)
'application/pdf'使用内置的mimeypes模块-将文件名映射到MimeTypes模块
>>> import mimetypes
>>> mimetypes.init()
>>> mimetypes.knownfiles
['/etc/mime.types', '/etc/httpd/mime.types', ... ]
>>> mimetypes.suffix_map['.tgz']
'.tar.gz'
>>> mimetypes.encodings_map['.gz']
'gzip'
>>> mimetypes.types_map['.tgz']
'application/x-tar-gz'JAVA 7
来源:Baeldung's blog on File MIME Types in Java
依赖于操作系统
@Test
public void get_JAVA7_mimetype() {
Path path = new File("Employee.xlsx").toPath();
String mimeType = Files.probeContentType(path);
assertEquals(mimeType, "application/vnd.ms-excel");
}它将使用FileTypeDetector实现来探测MIME类型,并调用每个实现的probeContentType来解析该类型。因此,如果文件对于实现是已知的,则返回内容类型。但是,如果没有发生这种情况,则会调用系统默认的文件类型检测器。
使用输入流的前几个字符进行解析
@Test
public void getMIMEType_from_Extension(){
File file = new File("Employee.xlsx");
String mimeType = URLConnection.guessContentTypeFromName(file.getName());
assertEquals(mimeType, "application/vnd.ms-excel");
}使用内置的MIME类型表
@Test
public void getMIMEType_UsingGetFileNameMap(){
File file = new File("Employee.xlsx");
FileNameMap fileNameMap = URLConnection.getFileNameMap();
String mimeType = fileNameMap.getContentTypeFor(file.getName());
assertEquals(mimeType, "image/png");
}它返回所有URLConnection实例使用的MIME类型矩阵,然后使用该矩阵解析输入文件类型。然而,当涉及到URLConnection时,这种MIME类型矩阵非常有限。
默认情况下,该类使用JRE_HOME/lib中的content-types.properties文件。但是,我们可以通过使用content.types.user.table属性指定一个特定于用户的表来扩展它:
System.setProperty("content.types.user.table","<path-to-file>");JavaScript
消息来源:FileReader API & Medium's article on using Magic Numbers in JavaScript to get Mime Types
解释使用FileReader接口获取的魔数
当使用javaScript根据文件流获取MimeType时,最终结果如下所示。打开embedded jsFiddle以查看和理解此方法。
Bonus:大多数MIME类型都可以访问它,也可以在getMimetype函数中添加自定义Mime类型。此外,它还完全支持MS Office文件的Mime类型。

在此示例中,计算文件的mime类型的步骤如下:
支持浏览器(总体支持95%以上,在所有现代浏览器中接近100% ):


const uploads = []
const fileSelector = document.getElementById('file-selector')
fileSelector.addEventListener('change', (event) => {
console.time('FileOpen')
const file = event.target.files[0]
const filereader = new FileReader()
filereader.onloadend = function(evt) {
if (evt.target.readyState === FileReader.DONE) {
const uint = new Uint8Array(evt.target.result)
let bytes = []
uint.forEach((byte) => {
bytes.push(byte.toString(16))
})
const hex = bytes.join('').toUpperCase()
uploads.push({
filename: file.name,
filetype: file.type ? file.type : 'Unknown/Extension missing',
binaryFileType: getMimetype(hex),
hex: hex
})
render()
}
console.timeEnd('FileOpen')
}
const blob = file.slice(0, 4);
filereader.readAsArrayBuffer(blob);
})
const render = () => {
const container = document.getElementById('files')
const uploadedFiles = uploads.map((file) => {
return `<div class=result><hr />
<span class=filename>Filename: <strong>${file.filename}</strong></span><br>
<span class=fileObject>File Object (Mime Type):<strong> ${file.filetype}</strong></span><br>
<span class=binaryObject>Binary (Mime Type):<strong> ${file.binaryFileType}</strong></span><br>
<span class=HexCode>Hex Code (Magic Number):<strong> <em>${file.hex}</strong></span></em>
</div>`
})
container.innerHTML = uploadedFiles.join('')
}
const getMimetype = (signature) => {
switch (signature) {
case '89504E47':
return 'image/png'
case '47494638':
return 'image/gif'
case '25504446':
return 'application/pdf'
case 'FFD8FFDB':
case 'FFD8FFE0':
case 'FFD8FFE1':
return 'image/jpeg'
case '504B0304':
return 'application/zip'
case '504B34':
return 'application/vnd.ms-excel.sheet.macroEnabled.12'
default:
return 'Unknown filetype'
}
}.result {
font-family: Palatino, "Palatino Linotype", "Palatino LT STD", "Book Antiqua", Georgia, serif;
line-height: 20px;
font-size: 14px;
margin: 10px 0;
}
.filename {
color: #333;
font-size: 16px;
}
.fileObject {
color: #a53;
}
.binaryObject {
color: #63f;
}
.HexCode {
color: #262;
}
em {
padding: 2px 4px;
background-color: #efefef;
font-style: normal;
}
input[type=file] {
background-color: #4CAF50;
border: none;
color: white;
padding: 8px 16px;
text-decoration: none;
margin: 4px 2px;
cursor: pointer;
}<body>
<input type="file" id="file-selector">
<div id="files"></div>
https://stackoverflow.com/questions/4212861
复制相似问题