微信或手机浏览器在线显示office文件(已测试ios、android)
最近开发微信企业号,发现微信andriod版内置浏览器在打开文件方面有问题,但是ios版没有问题,原因是ios版使用的是safari浏览器 支持文档直接打开,但是andriod版使用的是腾讯浏览器x5内核,不知道什么原因不支持,可能是集成出现的问题,这里提供解决方法,这种方法也同样适用手机浏览器或者安卓开发。通过此方法可以在微信上开发自己的第三方应用,或者解决自己的项目问题,解决方法及核心代码如下:
1、判断浏览器类型
httpservletrequest req = servletactioncontext.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";
}
}
# 转换成
# 不需要
# 自己的
# 的是
# 客服
# 股份有限公司
# 中文网
# 不支持
# 解决方法
# 是否存在
# 云飞
# 包含了
# 腾讯
# 中有
# 设备类型
# 相关文章
# 不存在
# 解决问题
# 第三方
# 转成
相关栏目:
【
网站优化84359 】
【
站长学院75356 】
【
运营推广7218 】
【
小程序18188 】
【
运维技术36808 】
【
营销推广32536 】
【
SEO优化41416 】
【
百度推广27695 】
【
AI推广83940 】
相关推荐:
探讨Golang框架的安全设计原则
malloc函数的用法和功能能
关于微信支付小程序v3【附PHP完整后端代码】
服务号和小程序的区别是什么
golang框架的安全性考虑:如何处理敏感数据?
golang框架如何支持零信任模型?
什么是 Python GIL?它是如何运作的?
浅谈小程序中怎么创建页面二维码
小程序如何自定义tabbar组件,实现底部tab切换
微信开发html5轻游戏中的几个坑
C++ 函数的单元测试与覆盖率
微信小程序 简单DEMO布局,逻辑,样式的练习
PHP 函数如何与外部 API 扩展?
PHP 函数根据稳定性如何分类?
C++ 内置函数的拓展应用和自定义案例
C++ 自身函数在云计算环境下的适用性如何?
unordered_map默认值
小程序怎么查看base64图片
unordered_map
PHP 函数扩展如何促进团队协作?
小程序开发用什么编程语言
C++ 函数库与标准模板库的应用场景有哪些?
如何解决小程序新版本覆盖率慢的问题
微力微营销,教你微商客源怎么去找,怎么让货更好卖!
总结分享一些小程序开发中实用的小知识
PHP 函数按兼容性如何分类?
总结几点小程序开发技巧
继微信小程序后,支付宝小程序也来啦!
详解微信小程序中如何安装和引用ECharts?
PHP 函数如何跨平台扩展?
如何提升Golang框架的安全性
PHP 函数按是否可以被重写如何分类?
什么是微信外挂
微信h5页面是什么
SageMath 安装
printf输出格式顺序
C++ 函数重载和 lambda 表达式的结合
printf输出双精度格式
golang框架性能优化常用的工具有哪些?
如何使用wrk2对golang框架进行性能测试?
C++ 函数库与标准模板库在容器管理中的最佳实践
printf格式什么意思
C++ 函数库与标准模板库对代码复用性的影响
微信小程序开发需要掌握哪些技术
C#微信公众号开发--网页授权(oauth2.0)获取用户基本信息一
如何在小程序页面内进行转发操作
小程序中的tabbar组件不显示是什么原因
微商应该怎样推广?
printf输出怎么用逗号隔开
微信小程序 教程之模板

上一篇
