黔优媒体网-软文媒体自助发稿平台!
  1. 行业资讯
  2. 正文

andriod版浏览器不支持文档直接打开的解决办法

来源:黔优媒体网   时间:2024-09-19

     最近开发微信企业号,发现微信andriod版内置浏览器在打开文件方面有问题,但是ios版没有问题,原因是ios版使用的是safari浏览器 支持文档直接打开,但是andriod版使用的是腾讯浏览器x5内核,不知道什么原因不支持,可能是集成出现的问题,这里提供解决方法,这种方法也同样适用手机浏览器或者安卓开发。通过此方法可以在微信上开发自己的第三方应用,或者解决自己的项目问题,解决方法及核心代码如下:

     1、判断浏览器类型

 HttpServletRequest req = ServletAction Context.getRequest();
String userAgent=req.getHeader( User-Agent //里面包含了设备类型

2、IOS版直接使用流输出

Andriod版利用openoffice+jod转换成html,然后对html内容重新编辑,文件中有图片的将路径改为网络路径或者采用流输出(改成网络路径注意特殊符号,如+号会变成空格)

/**
 * 从OA上抓取文件
 * author 牟云飞
 * company 海颐软件股份有限公司
 * tel 15562579597
 * qq 1147417467
 * team 客服产品中心/于洋
 * @return
 public String getFileFromOa(){ 
 HttpServletRequest req = ServletActionContext.getRequest();
 String userAgent=req.getHeader( User-Agent //里面包含了设备类型
 if(-1!=userAgent.indexOf( iPhone )){
 //-----------------//
 //此方法需要浏览器自己能够打开,ios可以但是微信andriod版内置浏览器不支持
 //-----------------//
 //如果是苹果手机
 //获得文件地址
 String fileUrl = ServletActionContext.getRequest().getParameter( fileUrl 
 fileUrl.replaceAll( %20 , \\+ //转换加号
 String strURL = MessageUtil.oaUrl+fileUrl;
 String fileType=strURL.substring(strURL.lastIndexOf( . )+1,strURL.length());
 //获得图片的数据流
 try {
 URL oaUrl = new URL(strURL);
 HttpURLConnection httpConn = (HttpURLConnection) oaUrl.openConnection();
 InputStream in = httpConn.getInputStream();
 //获取输出流
 HttpServletResponse response = ServletActionContext.getResponse();
 req.setCharacterEncoding( UTF-8 
 response.setCharacterEncoding( UTF-8 
 String name=fileUrl.substring(fileUrl.lastIndexOf( / )+1, fileUrl.length());
 response.setHeader( Content-Disposition , 
 attachment;filename= + 
 new String( (name ).getBytes(), 
 iso-8859-1 ));
 if( doc .equals(fileType)|| docx .equals(fileType)){
 response.setContentType( application/msword 
 }else if( xls .equals(fileType)|| xlsx .equals(fileType)){
 response.setContentType( application/msexcel 
 }else{
 response.setContentType( application/ +fileType);
 OutputStream out = response.getOutputStream();
 //输出图片信息
 byte[] bytes = new byte[1024]; 
 int cnt=0; 
 while ((cnt=in.read(bytes,0,bytes.length)) != -1) { 
 out.write(bytes, 0, cnt); 
 out.flush();
 out.close();
 in.close();
 } catch (MalformedURLException e) {
 e.printStackTrace();
 } catch (IOException e) {
 e.printStackTrace();
 return null;
 }else{
 //如果非苹果手机,自己处理文档
 //获得文件地址
 String fileUrl = ServletActionContext.getRequest().getParameter( fileUrl 
 fileUrl.replaceAll( %2B , \\+ //转换加号
 String strURL = MessageUtil.oaUrl+fileUrl;
 //在本地存放OA文件,然后转换成html,再对文档中的图片路径进行修改,最后输出到页面
 try {
 URL oaUrl = new URL(strURL);
 HttpURLConnection httpConn = (HttpURLConnection) oaUrl.openConnection();
 InputStream in = httpConn.getInputStream();
 //获取输出流
 HttpServletResponse response = ServletActionContext.getResponse();
 req.setCharacterEncoding( UTF-8 
 response.setCharacterEncoding( UTF-8 
 String name=fileUrl.substring(fileUrl.lastIndexOf( / )+1, fileUrl.length());
 //首先判断本地是否存在
 String path=req.getRealPath( 
 path=path.substring(0, path.lastIndexOf( \\ )+1);
 File htmlFile=new File(path + OaFileToHtml\\ +name+ .html 
 if(!htmlFile.exists()){
 //判断文件夹是否存在,创建文件夹
 String oaFilePath=path + OaFile //存放OA文档的文件夹路径;
 File oaFiles=new File(oaFilePath);
 if(!oaFiles.exists()){
 //如果文件夹不存在创建文件夹
 oaFiles.mkdirs();
 //将OA消息存入本地
 File oafile=new File(oaFiles+ File.separator +name);
 OutputStream out = new FileOutputStream(oafile);
 //输出图片信息
 byte[] bytes = new byte[1024]; 
 int cnt=0; 
 while ((cnt=in.read(bytes,0,bytes.length)) != -1) { 
 out.write(bytes, 0, cnt); 
 out.flush();
 out.close();
 in.close();
 //转换成html
 String htmlFilePath =path + OaFileToHtml //OA文件转成html的位置
 String htmlcontext=ConvertFileToHtml.toHtmlString(oafile, htmlFilePath);
 req.setAttribute( htmlcontext , htmlcontext);
 }else{
 //已经存在转换成功的文档
 StringBuffer htmlSb = new StringBuffer();
 try {
 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(htmlFile),Charset.forName( gb2312 )));
 while (br.ready()) {
 htmlSb.append(br.readLine());
 br.close();
 } catch (FileNotFoundException e) {
 e.printStackTrace();
 } catch (IOException e) {
 e.printStackTrace();
 // HTML文件字符串
 String htmlStr = htmlSb.toString();
 //System.out.println( htmlStr= + htmlStr);
 // 返回经过清洁的html文本
 req.setAttribute( htmlcontext , ConvertFileToHtml.clearFormat(htmlStr, ));
 } catch (MalformedURLException e) {
 e.printStackTrace();
 } catch (IOException e) {
 e.printStackTrace();
 return lookfile 
 }

-------------------将word转换成html文件,并读取内容-------------------------

此类借鉴原地址并修改jadethao.iteye.com/blog/1817738

package com.haiyisoft.wx.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ConnectException;
import java.nio.charset.Charset;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
 * * 端口启动命令:
 * soffice -headless -accept= socket,port=8100;urp;
 * author 牟云飞
 * company 海颐软件股份有限公司
 * tel 15562579597
 * qq 1147417467
 * team 客服产品中心/于洋
public class ConvertFileToHtml {
 * 将word文档转换成html文档
 * @param docFile 需要转换的word文档
 * @param filepath 转换之后html的存放路径
 * @return 转换之后的html文件
 public static File convert(File docFile, String filepath) {
 // 创建保存html的文件
 String fileName=docFile.getName();
 File htmlFile = new File(filepath + / + fileName + .html 
 // 创建Openoffice连接
 OpenOfficeConnection con = new SocketOpenOfficeConnection(8100);
 try {
 // 连接
 con.connect();
 } catch (ConnectException e) {
 System.out.println( 获取OpenOffice连接失败... 
 e.printStackTrace();
 // 创建转换器
 DocumentConverter converter = new OpenOfficeDocumentConverter(con);
 // 转换文档问html
 converter.convert(docFile, htmlFile);
 // 关闭openoffice连接
 con.disconnect();
 return htmlFile;
 * 将word转换成html文件,并且获取html文件代码。
 * @param docFile 需要转换的文档
 * @param filepath 文档中图片的保存位置
 * @return 转换成功的html代码
 public static String toHtmlString(File docFile, String filepath) {
 // 转换word文档
 File htmlFile = convert(docFile, filepath);
 System.out.println(htmlFile.getAbsolutePath());
 // 获取html文件流
 StringBuffer htmlSb = new StringBuffer();
 try {
 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(htmlFile),Charset.forName( gb2312 )));
 while (br.ready()) {
 htmlSb.append(br.readLine());
 br.close();
 // 删除临时文件
 //htmlFile.delete();
 } catch (FileNotFoundException e) {
 e.printStackTrace();
 } catch (IOException e) {
 e.printStackTrace();
 // HTML文件字符串
 String htmlStr = htmlSb.toString();
 //System.out.println( htmlStr= + htmlStr);
 // 返回经过清洁的html文本
 return clearFormat(htmlStr, filepath);
 * 清除一些不需要的html标记
 public static String clearFormat(String htmlStr, String docImgPath) {
 // 获取body内容的正则
 String bodyReg = BODY .* /BODY 
 Pattern bodyPattern = Pattern.compile(bodyReg);
 Matcher bodyMatcher = bodyPattern.matcher(htmlStr);
 if (bodyMatcher.find()) {
 // 获取BODY内容,并转化BODY标签为p
 htmlStr = bodyMatcher.group().replaceFirst( BODY , p ).replaceAll( /BODY , /p 
 // 调整图片地址,这里将图片路径改为网络路径
 htmlStr = htmlStr.replaceAll( IMG SRC=\ ../ , IMG SRC=\ + MessageUtil.webUrl+ /******.do?action=***);
 //特殊处理一下+号,因为网络传输+会变成空格,用%2B替换+号
 String temp1=htmlStr.substring(htmlStr.indexOf( action=*** ), htmlStr.length());
 String temp2=temp1.substring(0,temp1.indexOf( . ));
 String temp3=temp2.replaceAll( \\+ , %2B 
 htmlStr=htmlStr.substring(0,htmlStr.indexOf( action=*** ))+temp3+temp1.substring(temp1.indexOf( . ), temp1.length());
 // 把 P /P 转换成 /p /p 保留样式
 // content = content.replaceAll( ( P)([^ ]* .*?)( \\/P ) ,
 // p$2 /p 
 // 把 P /P 转换成 /p /p 并删除样式
 htmlStr = htmlStr.replaceAll( ( P)([^ ]*)( .*?)( \\/P ) , p$3 /p 
 // 删除不需要的标签
 htmlStr = htmlStr.replaceAll( [/]?(font|FONT|span|SPAN|xml|XML|del|DEL|ins|INS|meta|META|[ovwxpOVWXP]:\\w+)[^ ]*? , 
 // 删除不需要的属性
 htmlStr = htmlStr.replaceAll( ([^ ]*)(?:lang|LANG|class|CLASS|style|STYLE|size|SIZE|face|FACE|[ovwxpOVWXP]:\\w+)=(?: #39;[^ #39;]* #39;|\ \ [^\ \ ]*\ \ |[^ ]+)([^ ]*) , $1$2 
 return htmlStr;
}

【相关推荐】

1. 特别推荐:“php程序员工具箱”V0.1版本下载

2. 微信小程序完整源码下载

3. 微信小程序demo:阳淘
 

以上就是andriod版浏览器不支持文档直接打开的解决办法的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。


下一篇:没有了
【免责申明】黔优媒体网以上展示内容来源于用户自主上传、合作媒体、企业机构或网络收集整理,版权争议与本站无关,文章涉及见解与观点不代表黔优媒体网官方立场,请读者仅做参考,本文标题:andriod版浏览器不支持文档直接打开的解决办法;欢迎转载,转载时请说明出处。若您认为本文侵犯了您的版权信息,或您发现该内容有任何违法/违规的内容,请您立即联系我们及时修正或删除。(邮箱号: kefu@qianu.com)