14
A
回答
10
如果這是存儲被上載的文件:
- 創建文件名擴展
- 創建的mime類型的列的列由瀏覽器所發送
如果你沒有原始文件,而你只有字節,你有幾個好的解決方案。
如果你能夠使用圖書館,看看使用MIME-UTIL檢查字節:
http://technopaper.blogspot.com/2009/03/identifying-mime-using-mime-util.html
如果必須建立自己的字節檢測,這裏有許多最流行開始字節:
"BC" => bitcode,
"BM" => bitmap,
"BZ" => bzip,
"MZ" => exe,
"SIMPLE"=> fits,
"GIF8" => gif,
"GKSM" => gks,
[0x01,0xDA].pack('c*') => iris_rgb,
[0xF1,0x00,0x40,0xBB].pack('c*') => itc,
[0xFF,0xD8].pack('c*') => jpeg,
"IIN1" => niff,
"MThd" => midi,
"%PDF" => pdf,
"VIEW" => pm,
[0x89].pack('c*') + "PNG" => png,
"%!" => postscript,
"Y" + [0xA6].pack('c*') + "j" + [0x95].pack('c*') => sun_rasterfile,
"MM*" + [0x00].pack('c*') => tiff,
"II*" + [0x00].pack('c*') => tiff,
"gimp xcf" => gimp_xcf,
"#FIG" => xfig,
"/* XPM */" => xpm,
[0x23,0x21].pack('c*') => shebang,
[0x1F,0x9D].pack('c*') => compress,
[0x1F,0x8B].pack('c*') => gzip,
"PK" + [0x03,0x04].pack('c*') => pkzip,
"MZ" => dos_os2_windows_executable,
".ELF" => unix_elf,
[0x99,0x00].pack('c*') => pgp_public_ring,
[0x95,0x01].pack('c*') => pgp_security_ring,
[0x95,0x00].pack('c*') => pgp_security_ring,
[0xA6,0x00].pack('c*') => pgp_encrypted_data,
[0xD0,0xCF,0x11,0xE0].pack('c*') => docfile
2
也許我需要保存額外的列在我的數據庫文件擴展名。
這是不是試圖基於數據庫的內容來推斷一個MIME類型更好的解決方案,(至少)有以下原因:
- 如果源文件中的MIME類型,你可以存儲和使用它。
- 您可能(可能)要求用戶在提交文檔時指定MIME類型。
- 如果有用於找出一個MIME類型的一些啓發式方案:一次提取之後創建的錶行,而不是N次爲止
- 你可以做的工作,並
- 你可以報告啓發式不提供良好答案的情況,並且可能要求用戶說出文件類型的真實含義。
(我正在做一些假設,可能得不到保證,但問題並沒有給於更大的系統是如何打算工作的任何線索。)
31
原來存在JDK
的URLConnection
類像樣的方法,請參考以下答案:Getting A File's Mime Type In Java
如果需要從字節數組中提取文件擴展名而不是文件,則應使用java.io.ByteArrayInputStream
(專門從字節數組中讀取字節的類)而不是java.io.FileInputStream
(專門從文件讀取字節的類),如下例所示:
byte[] content = ;
InputStream is = new ByteArrayInputStream(content);
String mimeType = URLConnection.guessContentTypeFromStream(is);
//...close stream
希望這有助於...
相關問題
- 1. 從* .gz擴展名中提取文件
- 2. 如何從字節[](Blob)獲取文件類型擴展名
- 3. 從文件中提取字節數組
- 4. 從文件名中提取數字無視擴展
- 5. C# - 如何從路徑中提取文件名和擴展名?
- 6. 如何從PHP中的文件上傳中提取擴展名?
- 7. 從字節數組獲取文件名
- 8. 如何從沒有擴展名的文件名獲取文件擴展名?
- 9. powershell - 提取文件名和擴展名
- 10. 提取文件名(不含擴展名)
- 11. C# - 字節數組和文件擴展名
- 12. 如何從golang中的base64編碼文件中提取文件擴展名?
- 13. Php從數組值中獲取文件擴展名
- 14. javascript從路徑數組中獲取文件擴展名
- 15. 如何從數組中的文件名分解文件擴展名?
- 16. 從文件名提取基本名稱和擴展名 - file.txt.1
- 17. 提取一個文件的擴展名
- 18. 如何提取文件擴展名並根據允許的擴展名數組進行檢查?
- 19. 如何在php中提取擴展名
- 20. 如何從URL中獲取文件名和擴展名?
- 21. 如何從目錄中獲取文件名和擴展名
- 22. 如何提取目錄中文件的擴展名?
- 23. 無法從文件行提取文件擴展名
- 24. 從AppleScript路徑中提取文件擴展名
- 25. Android - 如何獲取文件擴展名?
- 26. Angularjs如何獲取文件擴展名?
- 27. 從文件名中提取數字
- 28. 從文件名中提取數字
- 29. 如何從文件名(VBA)中刪除文件擴展名
- 30. 如何從文件名中刪除文件擴展名?
'字節array'是字節,僅此而已的數組。如果你有一個'字節數組' - 你不能說存儲在那裏的東西。你可以試着猜測字節數組的內容,但它只不過是猜測。 – bezmax 2012-04-06 07:17:07
我不這麼認爲,我可以用MagicMatch類做到這一點,但爲此我需要導入外部jar。我正在尋找別的東西。 byte [] data = ... MagicMatch match = Magic.getMagicMatch(data); String mimeType = match.getMimeType(); – emilan 2012-04-06 07:20:59
我的意思是說 - 沒有任何地方保存在一個字節數組中的mimetype(除了支持它的某些數據類型)。例如,如果你有一個寫入字節數組的Hello World.txt文件,你將會有11個字節:'H,e,l,l,o,w,o,r,l,d'。你可以看到沒有mimetype。什麼'魔力'庫做 - 它試圖**文件的內容猜測**文件類型。有點類似反病毒軟件尋找病毒的模式,這些類型的庫試圖通過這些mimetypes的一些特定模式來猜測mimetype。 – bezmax 2012-04-06 07:24:33