uniapp-h5中的文件流下载和指定的url下载总结(解决下载后的pdf打开空白情况)

文章介绍了在uniapp的h5环境下,如何进行文件流下载(特别是带有水印的PDF)以及指定URL下载的方法。对于文件流下载,重点在于使用arraybuffer响应类型和Blob对象处理返回的数据流,然后通过a标签实现下载。而指定URL下载则利用uni.downloadFile接口,将临时文件路径转化为下载链接。两种方法都在浏览器环境中测试有效。
摘要由CSDN通过智能技术生成

uniapp-h5中的文件流下载和指定的url下载总结(解决下载后的pdf打开空白情况)

一.uniapp-h5文件流下载

场景:之所以会有文件流需求,前端给到一些水印内容,然后后台会给文件加上我们给到的水印并以文件流形式返回;这里以pdf格式为准。

这里单独调用uniapp的请求,调用封装的会出现打开下载后的文件空白情况;里面的注释我给写清楚一点

<template>
	<view class="main_row1_cell fb" v-for="(item,_index) in downList">
		<view class="downLoad" @click="download(item)">
			<text>下载</text>
		</view>
	</view>
</template>
<script>
import {getHostUrl} from '@/utils/util.js'//服务器的ip
export default {
		onShow() {

		},
		onLoad() {
			
		},
		data() {
			return {
				downList: [{name:"文件",id:1}],//列表数据
				'
			}
		},
		methods: {
				//文件流下载
			download(item) {
				let materialItem = item
				let _token = this.$store.state.token;
					// 水印
				let _strWaterText = "水印水印";
				let baseUrl = getHostUrl();//服务器的ip
				//这里是请求路径和参数的拼接(完整请求url)
				let url = baseUrl + '/course/courseAppDownload/material/' + materialItem.id + '.pdf?watermark=' + _strWaterText + '&&type=1'

				uni.request({
							url:url, 
							responseType: 'arraybuffer', //这里记得设置响应数据格式,不然预览的pdf是空白
							header:{
								'Authorization': _token,
							},
							success: (response) => {
							if(!response){
									uni.showToast({
									  title:"下载失败",
									  duration:2000
									  });
									}
									console.log(response.data)
							let pdfData = response.data; //pdfData是后端返回的文件流										//创建blob数据流,并用a标签来下载
							let blob = new Blob([ pdfData], {
								      type: 'application/pdf;charset=UTF-8'
								    })
							var a = document.createElement('a');
							document.body.appendChild(a);
							a.style = 'display: none';
							var url = window.URL.createObjectURL(blob);
							a.href = url;
							a.download = `${materialItem.materialName}.pdf`;
							a.click();
							a.remove();
							window.URL.revokeObjectURL(url);  
						},
						fail: err => {
								 console.log(err)
							}
								});
				
					}
		}
	}
</script>

二.uniapp-h5指定路径url下载

这里就比较直接类了,直接上代码

<template>
<text class="row2_text main-color fs-base" v-for="item in fileUrl" @click="downLoad(item)">{{item.name}}</text>
</template>
<script>
export default {
		onShow() {

		},
		onLoad() {
			
		},
		data() {
			return {
				fileUrl: [{name:"文件名字",url:"http:xxxxxxx"}],//列表数据
			}
		},
		methods: {
		//下载附件
			downLoad(item) {
				let _url = item.url;
				let _name=item.name
				uni.downloadFile({
					url: _url, //文件链接
					success: (res) => {
						if (res.statusCode === 200) {
							var oA = document.createElement("a");
							oA.download = _name; // 设置下载的文件名,默认是'下载'
							oA.href = res.tempFilePath; //临时路径再保存到本地
							document.body.appendChild(oA);
							oA.click();
							 oA.remove(); // 下载之后把创建的元素删除
						}
					},
					fail: (err) => {
						uni.showToast({
							icon: 'none',
							mask: true,
							title: '失败请重新下载',
						});
					},
				})
			}
		}
	}
</script>
以上测试需要在浏览器端测试哦,针对h5的。有什么问题欢迎评论区留言哦。。
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一行代码上晴天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值