OpenHarmony实战开发-如何实现防盗链应用功能。

news2024/12/29 9:43:40

介绍

目前许多网络图片资源有防盗链功能,需要在请求头中设置正确的Referer。本模块使用了第三方库imageknife,通过在请求头中添加Referer来获取防盗链图片功能。同时我们可以设置请求头中的其他参数,比如User-Agent来设置客户端,Origin设置来源,ETag来设置缓存等等。

使用说明:

  1. 输入需要获取的图片URL和Referer。
  2. 点击请求,等待下方出现图片。

效果图预览

在这里插入图片描述

实现思路

1.在工程入口导入三方库imageKnife,并且进行初始化。

  1. //
    通过ImageKnifeGlobal.getInstance()获取唯一实例。如果此实例不存在,则将ImageKnife注入到当前context中。
    if (!ImageKnifeGlobal.getInstance().getImageKnife()) { const
    context: Context = getContext(); if (context) {
    ImageKnife.with(context); } }

2.自定义请求头需要重新封装RequestOption对象,使用addHeader方法配置请求头,load方法设置需要请求的地址,errorholder方法设置请求失败回调,addListener方法设置成功回调等配置,最后在成功/失败回调中的图片赋值给图片组件。

// TODO: 知识点:自定义RequestOption来获取image图片。
const request = new RequestOption();
// TODO: 知识点:使用addHeader添加请求头。
request.addHeader('Referer', ref);
request.skipMemoryCache(true)
  .diskCacheStrategy(new NONE()) // 取消磁盘缓存
  .errorholder($r('app.media.image_failed'), {
    asyncSuccess: (data: ImageKnifeData) => {
      if (data.isPixelMap()) {
        this.imageKnifeOption.loadSrc = data.drawPixelMap?.imagePixelMap;
      }
    }
  })
  .load(url) // TODO: 知识点:添加请求url。
  .addListener({ // TODO: 知识点:添加请求回调监听器。
    callback: (err: BusinessError | string, data: ImageKnifeData) => {
      if (data.isPixelMap()) {
        if (data.drawPixelMap) {
          // TODO: 知识点:在这里获取到请求返回的图片,将图片赋值给imageKnifeOption.loadSrc。
          this.imageKnifeOption.loadSrc = data.drawPixelMap.imagePixelMap;
        } else {
          this.imageKnifeOption.loadSrc = $r('app.media.image_failed');
        }
      }
      return true;
    }
  })

3.在需要请求图片的地方,将步骤2中自定义的RequestOption对象传入imageknife实例的call函数。

const compSize: Size = {
  width: IMAGE_THEFT_IMAGEKNIFE_COMPONENT_WIDTH,
  height: IMAGE_THEFT_IMAGEKNIFE_COMPONENT_HEIGHT
};
// (必传)这里setImageViewSize函数必传初始组件大小,因为涉及到图片变换效果都需要适配图像源和组件大小。
// TODO: 知识点:如果是自适应组件等不确定初始图片宽高的情况,可以通过getInspectorByKey获取,参考https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs/faqs-arkui-kit-0000001769732210#section10880155113412。
request.setImageViewSize(compSize);
// 最后使用ImageKnife的call函数调用request即可
const imageKnife: ImageKnife | undefined = ImageKnifeGlobal.getInstance().getImageKnife();
if (imageKnife !== undefined) {
  // 由于本例需要通过改变请求头刷新图片,并不需要图片缓存,所以设置磁盘Lru缓存数量设置成0张,0字节,正常业务不需要此设置。
  imageKnife.setLruCacheSize(0, 0);
  imageKnife.call(request);
}

如果大家还没有掌握鸿蒙,现在想要在最短的时间里吃透它,我这边特意整理了《鸿蒙语法ArkTS、TypeScript、ArkUI等…视频教程》以及《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

鸿蒙语法ArkTS、TypeScript、ArkUI等…视频教程:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

OpenHarmony APP开发教程步骤:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

《鸿蒙开发学习手册》:

如何快速入门:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.基本概念
2.构建第一个ArkTS应用
3.……

在这里插入图片描述

开发基础知识:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……

在这里插入图片描述

基于ArkTS 开发:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

在这里插入图片描述

鸿蒙生态应用开发白皮书V2.0PDF:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1605005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【python】flask中ORM工具SQLAIchemy,各种数据查询操作详细解析

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

在Windows中使用WSL访问EXT4分区的完整指南

目录标题 1. 挂载步骤2. 卸载步骤3.在wsl中配置分区自动加载 众所周知,要想在windows上面访问ext4 linux分区还是很费劲的。之前有开源的ext2fsd方案,或者用paragon提供的付费版本的Paragon ExtFS。前者已经很久没有更新了,稳定性和可靠性是个…

云轴科技ZStack入选中国信通院《高质量数字化转型产品及服务全景图(2023年度)》

近日,由中国互联网协会主办、中国信通院承办的“2024高质量数字化转型创新发展大会”暨“铸基计划”年度会议在北京成功召开。 本次大会发布了2024年度行业数字化转型趋势,总结并展望了“铸基计划”2023年取得的工作成果及2024年的工作规划。同时&#…

Object.assign()用法及详细分析到底是浅拷贝还是深拷贝?

Object.assign方法用于对象的合并,将源对象(source )的所有可枚举属性,复制到目标对象(target)。 Object.assign(target,source1,source2) Object.assign方法的第一个参数是目标对象,后面的参数…

SD-WAN解决电商企业海外业务网络难题

全球化背景下,众多国内企业都涉及到海外贸易业务,尤其是出海电商得到蓬勃发展。企业做出海电商,需要访问国外网页、社交平台,如亚马逊、TikTok、Facebook、YouTube等与客户沟通互动,SD-WAN的发展正好为解决国际网络访问…

43.HarmonyOS鸿蒙系统 App(ArkUI)@State$单引号引用变量失败--解决方法

HarmonyOS鸿蒙系统 App(ArkUI)$单引号引用变量失败--解决方法 State name2:string 反引号键 $加大括号来引用变量,不是使用的单引号,而是反引号,在键盘的Esc键的下面 Entry Componentstruct Index {State message: string Hello WorldStat…

鸿蒙TypeScript学习第19天【命名空间】

1、TypeScript 命名空间 命名空间一个最明确的目的就是解决重名问题。 假设这样一种情况,当一个班上有两个名叫小明的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的姓&#xff0…

.netcore+vue新生分班系统的设计与实现

.netcore vue新生分班系统的设计与实现说明文档 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于.net core架构和mysql数据库vue 东北石油大学新生分班系统的设计与实现 功能模块: 登录 注册学生 忘记密码 系统首顶 个…

【电控笔记3.5】三相逆变器

基础 大小调变指标ma 频率调变指标mf 载波频率:pwm频率

PHP校验15位和18位身份证号

第十八位数字的计算方法为: 1.将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分 别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 2.将这17位数字和系数相乘的结果相加。 3.用加出来和除以11,看余数是多少? 4…

遇事不决 量子力学?

文章目录 引入量子力学产生的必然性量子力学名称的由来粒子?波?波粒二象性测不准原理 (不确定原理)叠加态原理 量子纠缠态叠加量子纠缠量子纠缠实验 逻辑判断,量子力学到底完善吗观测量子纠缠?那我们宏观世…

AUS Global 与皇家贝蒂斯俱乐部在对战皇家马德里的比赛日举办现场体验活动

AUS Global 最近前往西班牙庆祝与皇家贝蒂斯的赞助合作,并获得了难忘的比赛日体验,包括在贵宾室中观看皇家贝蒂斯对阵皇家马德里的精彩比赛。 活动开始时,AUS Global 受邀来到皇家贝蒂斯主场贝尼托-比利亚马林体育场的独家 Showbox 贵宾室。…

vue3 源码解析(7)— diff 算法源码的实现

前言 vue3 采用的 diff 算法名为快速 diff 算法,整个 diff 的过程分为以下5个阶段完成。 处理前置节点处理后置节点处理仅有新增节点处理仅有删除节点处理其他情况(新增 / 卸载 / 移动) 这里我们先定义新旧两个节点列表,接下来…

4款免费又好用的AI工具!很难相信!

人工智能(AI)已经成为我们生活和工作中不可或缺的一部分。但是,一提到AI工具,你可能首先会想到的是高昂的价格和复杂的操作。 今天,君君就要打破这一刻板印象,带你认识4个AI工具,它们不仅功能强…

《QT实用小工具·二十七》各种炫酷的样式表

1、概述 源码放在文章末尾 该项目实现了各种炫酷的样式表,如单选、多选、按钮、日历、表格、下拉框、滚轮等,下面是项目demo演示: 项目部分代码如下: #include "frmmain.h" #include "ui_frmmain.h" #inc…

数仓建模—数据架构

数仓—数据架构 为了在企业决策中使用数据,数据必须经过整个数据平台的各个阶段。整个过程是什么样子的,从开始到结束?原始形式的数据是如何转化为可导致商业决策的见解的?这些问题可以通过数据架构来回答。 数据架构是指记录组织所有数据资产的模型、规则和标准。它映射…

Zephyr Windows开发环境搭建

Zephyr 如果有错误或未及时更新,请以官网文档为主 官网:https://docs.zephyrproject.org/latest/develop/getting_started/index.htm 下载安装 Chocolatey 这是一个类似于在Linux系统下 yum 和 apt 那样的包管理器 官网:https://chocolat…

平衡车设计——硬件篇

在本文开始之前我忍不住想吐槽一个事情,就在前两天晚上,我满意地装完平衡车,给他取了个名字叫瓦力(没错,就是机器人总动员里的瓦力),他长这个样子。 把他放到桌子上放了一夜,第二天早…

【vue】Pinia-2 安装Pinia,使用store

1. 安装Pinia 在项目路径下执行npm install pinia 在package.json中查看 2. 使用store 在main.js中添加 import { createPinia } from pinia const pinia createPinia()修改createApp方法 最后示例如下(三处修改) import { createApp } from vue //…

Jmeter接口测试:使用教程(下)

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快 上一篇我给大家讲了jmeter的基本介绍跟参数化和jmeter脚…