解决基于uniapp的微信小程序,在iOS端无法预览文件,提示文件已损坏问题

这篇具有很好参考价值的文章主要介绍了解决基于uniapp的微信小程序,在iOS端无法预览文件,提示文件已损坏问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目场景:

开发了一个小程序,有预览二进制文件的需求。Android端可以成功预览,但iOS端提示文件已损坏,无法预览文件。

问题描述

微信小程序iOS端预览文件,显示无法预览此文件,文件已损坏。但是在Android端,小程序可以预览文件。

解决基于uniapp的微信小程序,在iOS端无法预览文件,提示文件已损坏问题


原因分析:

后端接口返回的是二进制文件流数据,首先调用uni.downloadFile()下载文件流数据,再调用uni.openDocument()预览文件。代码如下。
微信小程序 android端可以成功预览文件

				uni.downloadFile({
					url:'获取文件的接口地址',
					header: {
						AuthcToken: 'Bearer ' + uni.getStorageSync('mtoken'),
						responseType: 'blob',
					},
					complete() {
						uni.hideLoading();
					},
					fail(result) {
						uni.showToast({
							title: '下载文件失败',
							icon: 'none'
						})
					},
					success: function(res) {
						console.log(res,'文件地址')
						if (res.statusCode == 200) {
							var filePath = res.tempFilePath;
							uni.openDocument({
								filePath:filePath,
								success() {
									console.log(123456)
								}
							})
						} else {
							uni.showToast({
								title: '加载文件失败',
								icon: 'none'
							})
						}
					}
				});

此时,Android端已经可以成功预览文件了,但是在iOS端预览文件就显示文件损坏无法预览。
打印uni.downLoadFile()中success的返回值可以看到
解决基于uniapp的微信小程序,在iOS端无法预览文件,提示文件已损坏问题
后端接口传递的文件类型为docx,由上图表明,前端解析文件流的过程中,将docx格式的文件解析成了doc,又由于Andorid与iOS的预览机制不一样,导致文件在iOS端打不开。

解决方案:

经过尝试网上的多种方法,均无法解决该问题。于是我试着从官方预览文件api
入手,uni.openDocument(OBJECT),filePath是必传字段,但是fileType非必传。
解决基于uniapp的微信小程序,在iOS端无法预览文件,提示文件已损坏问题
微信小程序 android端 ios端均可成功预览文件

				uni.downloadFile({
					url:'获取文件的接口地址',
					header: {
						AuthcToken: 'Bearer ' + uni.getStorageSync('mtoken'),
						responseType: 'blob',
					},
					complete() {
						uni.hideLoading();
					},
					fail(result) {
						uni.showToast({
							title: '下载文件失败',
							icon: 'none'
						})
					},
					success: function(res) {
						console.log(res,'文件地址')
						if (res.statusCode == 200) {
							var filePath = res.tempFilePath;
							uni.openDocument({
								filePath:filePath,
								fileType:'docx', //指定文件类型为后端接口返回的文件类型
								success() {
									console.log(123456)
								}
							})
						} else {
							uni.showToast({
								title: '加载文件失败',
								icon: 'none'
							})
						}
					}
				});

指定uni.openDocument(),中的fileType为后端接口中返回的文件类型后缀名,即可在iOS端成功预览文件。

其他解决方法+指定文件名称

由于使用uni.downLoadFile()接口成功之后返回的路径,是临时的随机路径与名称,如果要指定文件名称,比如 (CSDN文件.docx),可以参考如下方法文章来源地址https://www.toymoban.com/news/detail-454125.html

				let filePath=`${wx.env.USER_DATA_PATH}/CSDN文件.doc`;
				 //使用原生方法获取二进制文件
				wx.request({
					url:'获取文件的接口地址',
					header:{
						AuthcToken: 'Bearer ' + uni.getStorageSync('mtoken'),
						Authorization: 'Bearer ' + uni.getStorageSync('mtoken'),
					},
					responseType:'arraybuffer',
					success(res) {
						console.log(res,'获取二进制文件')
						if(res.statusCode==200){
							const fs=wx.getFileSystemManager(); //全局的文件管理器
							// 写入文件
							fs.writeFile({
								filePath:filePath,
								data:res.data,//将返回的二进制文件流数据写入文件
								encoding:'binary',
								success(file){
									wx.openDocument({
										filePath:filePath,
										showMenu:true,
										fileType:'docx', //需要指定文件类型,否则iOS端无法预览
										success(success) {
											console.log('open success')
										},
										fail(err){
											console.log('open err')
										}
									})
								}
							})
						}
					}
				})

到了这里,关于解决基于uniapp的微信小程序,在iOS端无法预览文件,提示文件已损坏问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决uniapp编译的微信小程序不支持v-bind=“$attrs“

    原生组件无法支持v-bind;用户自定义组件以及第三方扩展组件才支持v-bind v-model属性 在高版本的vue3+vite中使用父组件传递下来的props中的某一个属性,作为当前组件的子组件的v-model入参,那么将会报错 [vite] [plugin:vite:vue] v-model cannot be used on a prop, because local prop bindings are not wr

    2024年02月08日
    浏览(92)
  • 基于uniapp的微信小程序spring boot商品进销存储系统[源码+文档+远程+答疑

     网站介绍:✌本网站专注专注于计算机技术领域的毕业设计辅导,提供JAVA、微信小程序、Python、APP、PHP、微服务、NET等毕设项目的定制和成品服务!✌         ✌IT实战营站长,拥有10年软件相关系统架构及教学经验,Java、大数据培训讲师,曾任公司技术总监;其与团队

    2024年02月21日
    浏览(75)
  • 基于SpringBoot+Uniapp的微信小程序二手购物商城(用户手册+测试报告+详细设计文档)

    ✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅 文末获取项目下载方式 🍅 一、项目背景介绍: 这个微信小程序二手购物商城的背景是为了满足用户

    2024年02月12日
    浏览(72)
  • 基于Uniapp、SSM与Vue的微信小程序走失人员报备平台——志愿者功能实现与影响分析

    摘要: 本文旨在探讨基于Uniapp、SSM框架和Vue.js技术的微信小程序走失人员报备平台的开发过程,特别是志愿者功能模块的实现及其对走失人员找回工作的影响。通过该平台,志愿者能够便捷地收集、报备走失人员信息,从而有效助力社会公益事业的发展。文章首先介绍了走失

    2024年04月28日
    浏览(63)
  • 【微信小程序】如何上传uniApp开发的微信小程序?

    微信开发者工具下载链接 Hbuilder X下载链接 扫码 选中账号 登录成功: ps: 如果之前没有权限但是已经登录此账号,需要在获取到权限后重新登录一次❗❗ ps: 不选中 运行时是否压缩代码 有可能代码包不包含插件大小过大,导致上传失败❗❗ 小程序性能优化指南 操作1 操作

    2024年02月09日
    浏览(216)
  • uniapp开发的微信小程序如何上传至微信小程序平台-完整简单步骤

    这个id请登录微信小程序号   设置中查看 成功上传。 message:Error: 系统错误,错误码:80051,source size 3743KB exceed max limit 2MB  如果这样报错可以尝试分包或者减至2M以内。 分包方法参考此博文 uniapp如何分包 分包配置后无法读取static文件夹_谨言不言的博客-CSDN博客_uniapp 分包

    2024年02月16日
    浏览(121)
  • uniapp HBuilder 无法运行微信小程序的问题解决

    当在 HBuilder 中新建一个空白项目,以微信小程序运行的时候,提示以下信息且没有运行成功。 原因其实已经在错误信息中写的很明白了,就是 微信开发工具 里的 安全设置 中没有 开启对应的服务端口 。 并且也写了如何操作: 打开微信开发者工具 点击 【设置】 - 【安全设

    2024年02月12日
    浏览(50)
  • 使用uniapp开发微信小程序的微信支付流程

    在我们做一些购物车的结算功能时是一定会有支付功能的,那我们如何去做微信支付这个功能呢,首先我们先要理清思路,并且要了解到接口需要哪些数据以及会返回哪些数据 注意:一定要先看接口文档! 创建订单。 ○ 请求创建订单的 API 接口:把(订单金额、收货地址、

    2024年02月09日
    浏览(76)
  • uniapp 微信小程序最新隐私弹窗更新方案,更新后无法登录问题解决方案

    uni-popup ref=\\\"popusAuthorization\\\" type=\\\"center\\\" :maskClick=\\\"false\\\" view class=\\\"contentview\\\" view class=\\\"title\\\"隐私保护指引/view view class=\\\"des\\\" @click=\\\"openPrivacyContract\\\" 在使用当前小程序服务之前,请仔细阅读text style=\\\"color: #07c160;\\\"{{privacyContractName}}/text。如你同意{{privacyContractName}},请点击“同意”开始使

    2024年02月09日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包