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

2023-10-30

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);  
						},
						ail: 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的。有什么问题欢迎评论区留言哦。。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 使用Python实现公司地址的(3-4级)标准化

    这个博客的目的是实现公司地址的模糊匹配与3 4级标准化 也可以迁移到房产信息 电话号码之类的字段上 本来的应用场景是反团伙欺诈以及失联客户的修复 大概的意思就是说多个相同公司的同事都在我公司借贷的欺诈可能性要高于其他客户 以及造假的房产信息
  • linux安装百度云盘

    之前window下一直使用绿色 你懂的 的百度云 但时切换到Ubuntu 系统之后 要下载好几个G的百度云资源却没有Linux版的客户端 网上又说使用bcloud 但是在16 04环境安装后总是登录不上 索性直接找了个浏览器插件下载 用起来
  • 股票API下单接口是怎样传入交易数据的?

    股票API下单接口传入交易数据的方法有四种 但主要使用的还是csvdatasetconfig和函数 不过基于当前的线程组或者请求创建CSV数据文件配置组件 如果这份数据只有这一个请求会用 那么就基于请求创建即可 如果这份数据会被这个线程组里
  • IDEA 快捷键等小技巧积累

    快捷键 全局搜索 Ctrl N 利用类名查找类文件 查看类继承关系 Ctrl H 查询某个符号被使用的所有地方 Alt F7 其他 自动导包 代码模板 code template
  • 【node.js】 Windows 下更新 node.js

    文章目录 一 node js 更新 一 查询 node js 版本 二 查询 node js 安装位置 三 官网下载安装包 四 安装到原位置 覆盖旧版本 二 npm 更新 一 查看版本 二 更新版本 三 yarn 更新 一 查看版本 二 更
  • (六)Java操作elasticSearch(2)

    Java操作elasticSearch 2 一 DSL查询文档 0 DSL 1 DSL查询分类 2 全文检索查询 3 精准查询 4 地理坐标查询 5 组合查询 二 搜索结果的处理 0 搜索结果处理整体语法 1 排序 2 分页 3 高亮 三
  • VMware Fusion 挂载物理机硬盘(整盘)

    以下操作前提 系统为 Mac OS OSX 安装了 VMware Fusion 实现原理 类似ESXI中的RDM映射 将物理硬盘映射到一个VM虚拟磁盘 可供VM选择的虚拟磁盘文件 首先查询本机硬盘情况 diskutil list 采用SCS
  • S50非接触式IC卡性能简介(M1)

    主要指标 容量为8K位EEPROM 分为16个扇区 每个扇区为4块 每块16个字节 以块为存取单位 每个扇区有独立的一组密码及访问控制 每张卡有唯一序列号 为32位 具有防冲突机制 支持多卡操作 无电源 自带天线 内含加密控制逻辑和通讯逻辑
  • chatgpt赋能python:Python主动抛出异常详解:了解如何正确地处理异常

    Python主动抛出异常详解 了解如何正确地处理异常 在Python开发中 异常处理是非常重要的一部分 可以使我们的程序更加健壮和可靠 然而并不是所有的错误都是由Python解释器捕获的 我们有时需要手动抛出异常 在本文中 我们将介绍Pyt
  • MPU6050 获取角度理论推导(二)---6轴融合算法

    接着上篇文章 https mp csdn net postedit 101777018 姿态角解算 互补滤波算法及理论推导 一般在程序中 姿态解算的方式有两种 一种是欧拉角法 一种是四元数法 这里不介绍欧拉角法 只介绍四元数法 互补滤波算法
  • makefile中关于all和.PHONY .cpp.o

    转自 http blog 163 com benben long blog static 199458243201110230292490 http blog csdn net wangxmin2005 article details 80
  • C 标准库 - 《locale.h》

    原文链接 https www runoob com cprogramming c standard library locale h html 简介 locale h 头文件定义了特定地域的设置 比如日期格式和货币符号 接下来我们将介绍一些
  • Java的Integer类

    1 用途 包装一个对象中的原始类型int的值 封装基本数据类型 int 将字符串转成基本数据类型 int 2 特点 类型为Integer的对象包含一个单一字段 其类型为int 此外 该类还提供了一些将int转换为String和String转
  • Git - 生成 SSH 公钥

    生成 SSH 公钥 如前所述 许多 Git 服务器都使用 SSH 公钥进行认证 为了向 Git 服务器提供 SSH 公钥 如果某系统用户尚未拥有密钥 必须事先为其生成一份 这个过程在所有操作系统上都是相似的 首先 你需要确认自己是否已经拥有
  • centos安装ruby

    可以使用 sudo yum install ruby 直接安装 但安装的是旧版本 不建议使用 1 去ruby官网直接下载安装包 http www ruby lang org en downloads 燃鹅 下载不了 那就借助 某雷吧 把安装
  • 查看linux是否已经安装了apache

    查看linux是否已经安装了apache 解决方法 查看linux是否已经安装了apache服务 可以通过执行 http www yayihouse com yayishuwu chapter 1800
  • 网易云params和encSecKey的获取

    网易云params和encSecKey的获取 params和encSecKey有什么用 软件准备 1 python及其对应的编辑器 推荐pycharm 2 发条js调试工具 我使用的是1 9版本 js代码分析 定位生成位置 分析传入参数 代
  • 关于软件设计使用中一些的原则简述

    概述 向大家介绍过一些软件开发的原则 比如优质代码的十诫和Unix传奇 下篇 中所以说的UNIX的设计原则 相信大家从中能够从中学了解到一些设计原理方面的知识 正如我在 再谈 我是怎么招聘程序 中所说的 一个好的程序员通常由其操作技能 知识
  • 雅思口语 九月新题 答案

    目录 你大概多长时间练习一次编程 你为什么选择这个专业 What are your career goals in the field of software engineering What sparked your interest i
  • uniapp-h5中的文件流下载和指定的url下载总结(解决下载后的pdf打开空白情况)

    uniapp h5中的文件流下载和指定的url下载总结 解决下载后的pdf打开空白情况 一 uniapp h5文件流下载 场景 之所以会有文件流需求 前端给到一些水印内容 然后后台会给文件加上我们给到的水印并以文件流形式返回 这里以pdf格