react-native-doc-viewer兼容中文文件名Android

在项目开发中使用了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)时产生的问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。