mirror of
https://gitee.com/openharmony-tpc/ImageKnife.git
synced 2026-07-15 06:04:31 +08:00
1.新增功能:支持自定义缓存key
2.添加缓存key中的url需要剔除token的演示界面 Signed-off-by: zhoulisheng1 <zhoulisheng1@huawei.com>
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import { EngineKeyInterface,EngineKeyFactories, RequestOption } from '@ohos/imageknife'
|
||||
|
||||
export class CustomEngineKeyImpl implements EngineKeyInterface {
|
||||
|
||||
redefineUrl:(loadSrc:string)=>string;
|
||||
|
||||
addOtherInfo:string = "Version=1.0.0;"
|
||||
|
||||
constructor() {
|
||||
this.redefineUrl = this.urlNeedClearToken.bind(this);
|
||||
}
|
||||
// request只读
|
||||
generateMemoryCacheKey(loadSrc:string,size:string,transformed:string,dontAnimate:boolean):string {
|
||||
return EngineKeyFactories.createMemoryCacheKey(loadSrc,size,transformed,dontAnimate,this.redefineUrl,this.addOtherInfo);
|
||||
}
|
||||
|
||||
generateTransformedDiskCacheKey(loadSrc:string,size:string,transformed:string,dontAnimate:boolean):string {
|
||||
return EngineKeyFactories.createTransformedDiskCacheKey(loadSrc,size,transformed,dontAnimate,this.redefineUrl,this.addOtherInfo);
|
||||
}
|
||||
|
||||
generateOriginalDiskCacheKey(loadSrc:string):string {
|
||||
return EngineKeyFactories.createOriginalDiskCacheKey(loadSrc,this.redefineUrl,this.addOtherInfo);
|
||||
}
|
||||
|
||||
|
||||
// 需求场景: 请求图片可能 请求中存在token需要清除, 可以把输入的url清除token后作为key的一部分,这样token发生变化也能命中缓存。
|
||||
urlNeedClearToken(url:string):string {
|
||||
if (this.isHttpRequest(url)) {
|
||||
return this.clearToken(url)
|
||||
} else {
|
||||
return url;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
isHttpRequest(loadSrc:string){
|
||||
if(typeof loadSrc == "string" && loadSrc.toLowerCase().startsWith("http")){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// 清除url里面中携带的token
|
||||
clearToken(url:string):string{
|
||||
let retUrl = url.replace(this.findTokenParam(url),"")
|
||||
return retUrl;
|
||||
}
|
||||
|
||||
// 网络图片加载 可能因为Token问题导致缓存失效
|
||||
findTokenParam(url: string): string {
|
||||
let tokenParam = "";
|
||||
let tokenKeyIndex = url.indexOf("?token=") >= 0 ? url.indexOf("?token=") : url.indexOf("&token=");
|
||||
if (tokenKeyIndex != -1) {
|
||||
let nextAndIndex = url.indexOf("&", tokenKeyIndex + 1);
|
||||
if (nextAndIndex != -1) {
|
||||
tokenParam = url.substring(tokenKeyIndex + 1, nextAndIndex + 1);
|
||||
} else {
|
||||
tokenParam = url.substring(tokenKeyIndex);
|
||||
}
|
||||
}
|
||||
return tokenParam;
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,8 @@
|
||||
import UIAbility from '@ohos.app.ability.UIAbility';
|
||||
import hilog from '@ohos.hilog';
|
||||
import window from '@ohos.window';
|
||||
import { ImageKnife,ImageKnifeDrawFactory} from '@ohos/imageknife'
|
||||
import { ImageKnife,ImageKnifeDrawFactory } from '@ohos/imageknife'
|
||||
import { CustomEngineKeyImpl } from './CustomEngineKeyImpl'
|
||||
|
||||
export default class EntryAbility extends UIAbility {
|
||||
onCreate(want, launchParam) {
|
||||
@@ -9,6 +10,8 @@ export default class EntryAbility extends UIAbility {
|
||||
globalThis.ImageKnife = ImageKnife.with(this.context);
|
||||
// 全局配置网络加载进度条
|
||||
globalThis.ImageKnife.setDefaultLifeCycle(ImageKnifeDrawFactory.createProgressLifeCycle("#10a5ff", 0.5))
|
||||
// 全局配置缓存key
|
||||
globalThis.ImageKnife.setEngineKeyImpl(new CustomEngineKeyImpl())
|
||||
}
|
||||
|
||||
onDestroy() {
|
||||
|
||||
+40
-13
@@ -12,16 +12,17 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import {ImageKnifeComponent} from '@ohos/imageknife'
|
||||
import {ImageKnifeOption} from '@ohos/imageknife'
|
||||
import {RotateImageTransformation} from '@ohos/imageknife'
|
||||
import {RoundedCornersTransformation} from '@ohos/imageknife'
|
||||
import {
|
||||
ImageKnifeComponent,
|
||||
ImageKnifeOption,
|
||||
RotateImageTransformation,
|
||||
RoundedCornersTransformation
|
||||
} from '@ohos/imageknife'
|
||||
|
||||
@Entry
|
||||
@Component
|
||||
struct FrescoImageTestCasePage {
|
||||
|
||||
@State progresshint:string = "输出加载百分比回调信息"
|
||||
struct CacheRuleChangedPage {
|
||||
@State progresshint: string = "输出加载百分比回调信息"
|
||||
@State imageKnifeOption1: ImageKnifeOption =
|
||||
{
|
||||
loadSrc: "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83ericA1Mv66TwicuYOtbDMBcUhv1aa9RJBeAn9uURfcZD0AUGrJebAn1g2AjN0vb2E1XTET7fTuLBNmA/132",
|
||||
@@ -50,6 +51,14 @@ struct FrescoImageTestCasePage {
|
||||
{
|
||||
loadSrc: "https://hbimg.huabanimg.com/cc6af25f8d782d3cf3122bef4e61571378271145735e9-vEVggB",
|
||||
|
||||
placeholderSrc: $r('app.media.icon_loading'),
|
||||
errorholderSrc: $r('app.media.icon_failed'),
|
||||
displayProgress: true,
|
||||
};
|
||||
@State imageKnifeOption5: ImageKnifeOption =
|
||||
{
|
||||
loadSrc: "https://hbimg.huabanimg.com/95a6d37a39aa0b70d48fa18dc7df8309e2e0e8e85571e-x4hhks_fw658/format/webp?mama=sdafsfasdfsdfsdaf&baba=sdfsafsafsd",
|
||||
|
||||
placeholderSrc: $r('app.media.icon_loading'),
|
||||
errorholderSrc: $r('app.media.icon_failed'),
|
||||
displayProgress: true,
|
||||
@@ -58,17 +67,35 @@ struct FrescoImageTestCasePage {
|
||||
build() {
|
||||
Scroll() {
|
||||
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
|
||||
// ImageKnifeComponent({ imageKnifeOption: this.imageKnifeOption1 })
|
||||
// ImageKnifeComponent({ imageKnifeOption: this.imageKnifeOption })
|
||||
// ImageKnifeComponent({ imageKnifeOption: this.imageKnifeOption3 })
|
||||
|
||||
Text('下图默认加载网络图片不带?token=').margin({top:20})
|
||||
Button('点击加载网络图片?token=').margin({top:5}).onClick(() => {
|
||||
|
||||
this.imageKnifeOption4 = {
|
||||
loadSrc: "https://hbimg.huabanimg.com/cc6af25f8d782d3cf3122bef4e61571378271145735e9-vEVggB?token=fsdafsfsafsafsdaf111111",
|
||||
placeholderSrc: $r('app.media.icon_loading'),
|
||||
errorholderSrc: $r('app.media.icon_failed'),
|
||||
displayProgress: true,
|
||||
}
|
||||
})
|
||||
|
||||
ImageKnifeComponent({ imageKnifeOption: this.imageKnifeOption4 })
|
||||
.width(300)
|
||||
.height(300)
|
||||
// Scroll() {
|
||||
// Text(this.progresshint).fontSize(15)
|
||||
// }.width(300).height(200)
|
||||
|
||||
Text('下图默认加载网络图片不带&token=').margin({top:20})
|
||||
|
||||
Button('点击加载网络图片&token=').margin({top:5}).onClick(() => {
|
||||
this.imageKnifeOption5 = {
|
||||
loadSrc: "https://hbimg.huabanimg.com/95a6d37a39aa0b70d48fa18dc7df8309e2e0e8e85571e-x4hhks_fw658/format/webp?mama=sdafsfasdfsdfsdaf&token=fsdafsfsafsafsdaf111111&baba=sdfsafsafsd",
|
||||
placeholderSrc: $r('app.media.icon_loading'),
|
||||
errorholderSrc: $r('app.media.icon_failed'),
|
||||
displayProgress: true,
|
||||
}
|
||||
})
|
||||
ImageKnifeComponent({ imageKnifeOption: this.imageKnifeOption5 })
|
||||
.width(300)
|
||||
.height(300)
|
||||
}
|
||||
}
|
||||
.width('100%')
|
||||
@@ -127,12 +127,12 @@ struct IndexFunctionDemo {
|
||||
}).margin({ top: 5, left: 3 })
|
||||
}.width('100%').height(60).backgroundColor(Color.Pink)
|
||||
|
||||
Text("测试fresco").fontSize(15)
|
||||
Text("测试缓存规则和重试").fontSize(15)
|
||||
Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
|
||||
Button("加载百分比")
|
||||
Button("更改缓存规则")
|
||||
.onClick(() => {
|
||||
console.log("加载百分比")
|
||||
router.push({ uri: "pages/frescoImageTestCasePage" });
|
||||
console.log("更改缓存规则")
|
||||
router.push({ uri: "pages/CacheRuleChangedPage" });
|
||||
}).margin({ top: 5, left: 3 })
|
||||
Button("重试Retry")
|
||||
.onClick(() => {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"src": [
|
||||
"pages/index",
|
||||
"pages/frescoImageTestCasePage",
|
||||
"pages/CacheRuleChangedPage",
|
||||
"pages/frescoRetryTestCasePage",
|
||||
"pages/basicTestFeatureAbilityPage",
|
||||
"pages/basicTestFileIOPage",
|
||||
|
||||
Reference in New Issue
Block a user