From 927bfc541f984626bca3adf12f465cea0486ab41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=90=A5=E7=8F=80?= Date: Thu, 1 Feb 2024 19:21:45 +0800 Subject: [PATCH] =?UTF-8?q?imageKnife=20header=E8=AF=B7=E6=B1=82=E5=A4=B4?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张琥珀 --- .../src/main/ets/entryability/EntryAbility.ets | 3 +++ .../main/ets/pages/RequestOptionLoadImage.ets | 3 +++ .../main/ets/pages/imageknifeTestCaseIndex.ets | 8 ++++++++ entry/src/main/ets/pages/index.ets | 18 ++++++++++++++---- .../resources/base/profile/main_pages.json | 3 ++- library/index.ets | 2 +- .../ets/components/imageknife/ImageKnife.ets | 14 +++++++++++++- .../imageknife/ImageKnifeComponent.ets | 8 ++++++++ .../components/imageknife/ImageKnifeOption.ets | 8 +++++++- .../components/imageknife/RequestOption.ets | 11 +++++++++++ .../networkmanage/HttpDownloadClient.ets | 11 +++++++++-- sharedlibrary/src/main/ets/Index.ets | 2 +- 12 files changed, 80 insertions(+), 11 deletions(-) diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets index d28ff9b..f1074a5 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ets +++ b/entry/src/main/ets/entryability/EntryAbility.ets @@ -49,6 +49,9 @@ export default class EntryAbility extends UIAbility { imageKnife.setEngineKeyImpl(new CustomEngineKeyImpl()) // 设置全局内存缓存大小张数 imageKnife.setLruCacheSize(100, 100 * 1204 * 1024) + // 请求头调用 + imageKnife.addHeader('aaa', "全局调用iamgeKnife"); + imageKnife.deleteHeader('aaa'); } // 开启ImageKnife所有级别日志开关 LogUtil.mLogLevel = LogUtil.ALL diff --git a/entry/src/main/ets/pages/RequestOptionLoadImage.ets b/entry/src/main/ets/pages/RequestOptionLoadImage.ets index 4b7fb99..86259a8 100644 --- a/entry/src/main/ets/pages/RequestOptionLoadImage.ets +++ b/entry/src/main/ets/pages/RequestOptionLoadImage.ets @@ -34,6 +34,9 @@ struct RequestOptionLoadImage { load(src: string | image.PixelMap | Resource) { clearTimeout(timeId) let request = new RequestOption() + //*requestOption调用* + request.addHeader('aaa', "RequestOption拿到了"); + request.load(src) .addListener({ callback: (err: BusinessError | string, data: ImageKnifeData) => { if (data.isPixelMap()) { diff --git a/entry/src/main/ets/pages/imageknifeTestCaseIndex.ets b/entry/src/main/ets/pages/imageknifeTestCaseIndex.ets index 0161792..3fec8c9 100644 --- a/entry/src/main/ets/pages/imageknifeTestCaseIndex.ets +++ b/entry/src/main/ets/pages/imageknifeTestCaseIndex.ets @@ -306,6 +306,14 @@ struct IndexFunctionDemo { router.pushUrl({ url: 'pages/testImageKnifeRouter1' }); }).margin({ top: 5, left: 3 }) }.width('100%').height(60).backgroundColor(Color.Pink) + + Text('测试图片header属性').fontSize(15) + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Button('图片header属性设置') + .onClick(() => { + router.pushUrl({ url: 'pages/testImageKnifeHttpRequestHeader' }); + }).margin({ top: 5, left: 3 }) + }.width('100%').height(60).backgroundColor(Color.Pink) } } .width('100%') diff --git a/entry/src/main/ets/pages/index.ets b/entry/src/main/ets/pages/index.ets index 879f5f5..bf47aa0 100644 --- a/entry/src/main/ets/pages/index.ets +++ b/entry/src/main/ets/pages/index.ets @@ -13,6 +13,7 @@ * limitations under the License. */ import router from '@ohos.router'; +import { HeaderOption } from '@ohos/imageKnife/src/main/ets/components/imageKnife/ImageKnifeOption'; import { ImageKnifeComponent, ImageKnifeOption, @@ -25,21 +26,30 @@ import { ObjectKey } from '@ohos/libraryimageknife'; @Entry @Component struct IndexFunctionDemo { + @State headerOptions: HeaderOptions = { + key: 'aaa', + values: '单个image组件调用' + }; + + @State headerOptions1: HeaderOptions = { + key: 'bbb', + values: '单个image组件调用1' + }; @State imageKnifeOption1: ImageKnifeOption = { loadSrc: $r('app.media.icon'), - placeholderSrc: $r('app.media.icon_loading'), - errorholderSrc: $r('app.media.icon_failed') + errorholderSrc: $r('app.media.icon_failed'), + headerOption: [this.headerOptions, this.headerOptions1] }; @State imageKnifeOption2: ImageKnifeOption = { loadSrc: $r('app.media.icon'), - placeholderSrc: $r('app.media.icon_loading'), - errorholderSrc: $r('app.media.icon_failed') + errorholderSrc: $r('app.media.icon_failed'), + headerOption: [this.headerOptions, this.headerOptions1] }; build() { diff --git a/entry/src/main/resources/base/profile/main_pages.json b/entry/src/main/resources/base/profile/main_pages.json index a119187..e06a871 100644 --- a/entry/src/main/resources/base/profile/main_pages.json +++ b/entry/src/main/resources/base/profile/main_pages.json @@ -38,6 +38,7 @@ "pages/testImageAntiAliasingWithPage", "pages/testImageKnifeRouter1", "pages/testImageKnifeRouter2", - "pages/RequestOptionLoadImage" + "pages/RequestOptionLoadImage", + "pages/testImageKnifeHttpRequestHeader" ] } \ No newline at end of file diff --git a/library/index.ets b/library/index.ets index 942b184..09171b9 100644 --- a/library/index.ets +++ b/library/index.ets @@ -99,7 +99,7 @@ export { ObjectKey } from './src/main/ets/components/imageknife/ObjectKey' export {RequestOption,Size,DetachFromLayout} from './src/main/ets/components/imageknife/RequestOption' export { ImageKnifeComponent, ScaleType, ScaleTypeHelper, AntiAliasing} from './src/main/ets/components/imageknife/ImageKnifeComponent' export { ImageKnifeDrawFactory } from './src/main/ets/components/imageknife/ImageKnifeDrawFactory' -export {ImageKnifeOption,CropCircleWithBorder,Crop,GifOptions,TransformOptions} from './src/main/ets/components/imageknife/ImageKnifeOption' +export {ImageKnifeOption,CropCircleWithBorder,Crop,GifOptions,TransformOptions,HeaderOptions} from './src/main/ets/components/imageknife/ImageKnifeOption' export { ImageKnifeData } from './src/main/ets/components/imageknife/ImageKnifeData' export {IAllCacheInfoCallback,AllCacheInfo,ResourceCacheInfo,MemoryCacheInfo,DataCacheInfo} from './src/main/ets/components/imageknife/interface/IAllCacheInfoCallback' export {IParseImage} from './src/main/ets/components/imageknife/interface/IParseImage' diff --git a/library/src/main/ets/components/imageknife/ImageKnife.ets b/library/src/main/ets/components/imageknife/ImageKnife.ets index 6447ff4..22ad35d 100644 --- a/library/src/main/ets/components/imageknife/ImageKnife.ets +++ b/library/src/main/ets/components/imageknife/ImageKnife.ets @@ -50,7 +50,7 @@ export class ImageKnife { resourceFetch: IResourceFetch; filesPath: string = ""; // data/data/包名/files目录 - + headerMap: Map = new Map(); //定义全局map placeholderCache: string = "placeholderCache" runningMaps: EasyLinkedHashMap; pendingMaps: EasyLinkedHashMap; @@ -99,6 +99,14 @@ export class ImageKnife { } + //全局设置请求头调用方法 + addHeader(key: string, value: string) { + this.headerMap.set(key, value); + } + + deleteHeader(key: string) { + this.headerMap.delete(key); + } getMemoryCache(): MemoryLruCache { return this.memoryCache; @@ -279,6 +287,10 @@ export class ImageKnife { // 每个request 公共信息补充 request.setFilesPath(this.filesPath); + if (this.headerMap.size > 0) { + request.addHeaderMap(this.headerMap) + } + // 首先执行占位图 解析任务 if (request.placeholderSrc) { PlaceHolderManager.execute(request) diff --git a/library/src/main/ets/components/imageknife/ImageKnifeComponent.ets b/library/src/main/ets/components/imageknife/ImageKnifeComponent.ets index b265792..ab0ac57 100644 --- a/library/src/main/ets/components/imageknife/ImageKnifeComponent.ets +++ b/library/src/main/ets/components/imageknife/ImageKnifeComponent.ets @@ -222,6 +222,14 @@ export struct ImageKnifeComponent { } configDisplay(request: RequestOption) { + //单个image组件多个请求头调用 + if (this.imageKnifeOption.headerOption != underfined && this.imageKnifeOption.headerOption?.length > 0) { + for (let i = 0; i < this.imageKnifeOption.headerOption.length; i++) { + let headerOptions = this.imageKnifeOption.headerOption[i]; + request.addHeader(headerOptions.key, headerOptions.values); + } + console.log('wxxx 999:' + JSON.stringify(this.imageKnifeOption.headerOption.length)); + } if (this.imageKnifeOption.placeholderSrc) { request.placeholder(this.imageKnifeOption.placeholderSrc, {asyncSuccess:(data:ImageKnifeData) => { LogUtil.log('ImageKnifeComponent request.placeholder callback') diff --git a/library/src/main/ets/components/imageknife/ImageKnifeOption.ets b/library/src/main/ets/components/imageknife/ImageKnifeOption.ets index cab4c2c..9069b3b 100644 --- a/library/src/main/ets/components/imageknife/ImageKnifeOption.ets +++ b/library/src/main/ets/components/imageknife/ImageKnifeOption.ets @@ -57,9 +57,15 @@ export interface TransformOptions{ rotateImage?: number } +export interface HeaderOptions { + key: string; + values: string; +} + @Observed export class ImageKnifeOption { - + // header请求列表 + headerOption?: Array; // 主图资源 loadSrc: string | PixelMap | Resource = ''; mainScaleType?: ScaleType = ScaleType.FIT_CENTER diff --git a/library/src/main/ets/components/imageknife/RequestOption.ets b/library/src/main/ets/components/imageknife/RequestOption.ets index a9b79d3..37a9022 100644 --- a/library/src/main/ets/components/imageknife/RequestOption.ets +++ b/library/src/main/ets/components/imageknife/RequestOption.ets @@ -60,6 +60,17 @@ export interface DetachFromLayout{ } export class RequestOption { + // 遍历添加图片http请求头 + map: Map = new Map(); + // RequestOption调用header对于的方法 + addHeader(key: string, value: string) { + this.map.set(key, value); + } + // 全局调用header对应的方法,包含RequestOption的形式 + addHeaderMap(map: Map) { + this.map = map; + } + uuid:string ='' // 唯一标识 loadSrc: string | PixelMap | Resource = ''; strategy: DiskStrategy = new AUTOMATIC(); diff --git a/library/src/main/ets/components/imageknife/networkmanage/HttpDownloadClient.ets b/library/src/main/ets/components/imageknife/networkmanage/HttpDownloadClient.ets index 7b823c9..b6ad707 100644 --- a/library/src/main/ets/components/imageknife/networkmanage/HttpDownloadClient.ets +++ b/library/src/main/ets/components/imageknife/networkmanage/HttpDownloadClient.ets @@ -29,6 +29,13 @@ class RequestData{ totalSize: number = 2000 } +class Header { + public map: Map = new Map(); + constructor(map: Map) { + this.map = map; + } +} + export class HttpDownloadClient implements IDataFetch { loadData(request: RequestOption, onComplete: (img: ArrayBuffer) => void, onError: (err: string) => void) { try { @@ -45,7 +52,6 @@ export class HttpDownloadClient implements IDataFetch { // 下载数据流多次返回 arrayBuffers.push(data); }) - httpRequest.on('dataReceiveProgress', (data: RequestData) => { // 下载进度 if(data != undefined && (typeof data.receiveSize == 'number') && (typeof data.totalSize == 'number') ) { @@ -55,16 +61,17 @@ export class HttpDownloadClient implements IDataFetch { } } }) - httpRequest.on('dataEnd', () => { // 下载完毕 let combineArray = this.combineArrayBuffers(arrayBuffers); onComplete(combineArray) }) + console.log('refer' + JSON.stringify(request.map.get('aaa'))); httpRequest.requestInStream( request.loadSrc as string, { + header: new Header(request.map), method: http.RequestMethod.GET, expectDataType: http.HttpDataType.ARRAY_BUFFER, connectTimeout: 60000, // 可选 默认60000ms diff --git a/sharedlibrary/src/main/ets/Index.ets b/sharedlibrary/src/main/ets/Index.ets index 6e2450c..dca67d5 100644 --- a/sharedlibrary/src/main/ets/Index.ets +++ b/sharedlibrary/src/main/ets/Index.ets @@ -101,7 +101,7 @@ export {RequestOption,Size} from '@ohos/imageknife' export {ObjectKey} from '@ohos/imageknife' export { ImageKnifeComponent, ScaleType, ScaleTypeHelper, AntiAliasing} from '@ohos/imageknife' export { ImageKnifeDrawFactory } from '@ohos/imageknife' -export {ImageKnifeOption,CropCircleWithBorder,Crop,GifOptions,TransformOptions} from '@ohos/imageknife' +export {ImageKnifeOption,CropCircleWithBorder,Crop,GifOptions,TransformOptions,HeaderOptions} from '@ohos/imageknife' export { ImageKnifeData } from '@ohos/imageknife' export {IAllCacheInfoCallback,AllCacheInfo,ResourceCacheInfo,MemoryCacheInfo,DataCacheInfo} from '@ohos/imageknife' export {IParseImage} from '@ohos/imageknife'