温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何解决andriod版浏览器不支持文档直接打开的问题

发布时间:2021-01-18 14:22:32 来源:亿速云 阅读:291 作者:小新 栏目:移动开发

这篇文章主要介绍如何解决andriod版浏览器不支持文档直接打开的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

    最近开发微信企业号,发现微信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+)=(?:'[^']*'|\"\"[^\"\"]*\"\"|[^>]+)([^>]*)>","<$1$2>");	return htmlStr;	} }

以上是“如何解决andriod版浏览器不支持文档直接打开的问题”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI