在項目開發(fā)中使用了react-native-doc-viewer組件敷搪,這個組件可以支持在手機上直接打開遠程或本地文檔
- 支持的文檔格式:xls,ppt,doc,xlsx,pptx,docx,png,jpg,pdf,mp4
- 支持iOS和Android
可以去github上查看一番,react-native-doc-viewer的github赡勘,或者npm react-native-doc-viewer的npm
說一下遇到的問題,下載了文件后發(fā)現(xiàn)包含中文名稱的文件無法正確打開闸与,查看源碼發(fā)現(xiàn)在獲取文件的MIMEType時忽略了對于中文的處理毙替,這也是bug產(chǎn)生的原因。
react-native-doc-viewer內(nèi)Module的源碼
private static String getMimeType(String url) {
String mimeType = null;
System.out.println("Url: " + url);
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
if (extension != null) {
mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
...
}
其中MimeTypeMap.getFileExtensionFromUrl(url)是不支持中文的
在其中加上兼容中文名的處理
private static String getMimeType(String url) {
String mimeType = null;
System.out.println("Url: " + url);
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
if (extension != null) {
mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
/**
* 兼容中文名
* 截取文件后綴
*/
if (mimeType == null) {
extension = url.substring(url.lastIndexOf(".") + 1, url.length());
mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
}
...
}
這個解決方案適用于使用MimeTypeMap.getFileExtensionFromUrl(url)時產(chǎn)生的問題