在项目开发中使用了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
说一下遇到的问题,下载了文件后发现包含中文名称的文件无法正确打开,查看源码发现在获取文件的MIMEType时忽略了对于中文的处理,这也是bug产生的原因。
react-native-doc-viewer内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)时产生的问题