HarmonyOS鸿蒙Next中RichEditor插入的网络图片带cooken不能显示出来只有占位,这种带cooken的要怎么显示在RichEditor里面
HarmonyOS鸿蒙Next中RichEditor插入的网络图片带cooken不能显示出来只有占位,这种带cooken的要怎么显示在RichEditor里面
RichEditor(this.options)
.onReady((controller) => {
this.controller.addImageSpan('https://counselorcat.wisedu.com/wec-im-message/proxy/file/UVEjTTkIO6O', {
imageStyle: {
size: [100, 100]
}
})
})
更多关于HarmonyOS鸿蒙Next中RichEditor插入的网络图片带cooken不能显示出来只有占位,这种带cooken的要怎么显示在RichEditor里面的实战教程也可以访问 https://www.itying.com/category-93-b0.html

这边使用http下载,加入cookie,返回沙箱路径,在转化成文件路径,http加maxlimit可以保证下载图片不会因为图片过大无法显示,已解决。
更多关于HarmonyOS鸿蒙Next中RichEditor插入的网络图片带cooken不能显示出来只有占位,这种带cooken的要怎么显示在RichEditor里面的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
您好,addImageSpan该方法在文档中有明确说明,不建议添加网络图片:

如果你配置文件中注册了访问网络权限还是不显示,说明存在异常情况,可以将图片下载到沙箱后,在这里设置沙箱的路径,第一个参数的类型为PixelMap或者是ResourceStr类型,不支持网络地址的字符串,多尝试,总会有好的结果的,加油
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17,
RichEditor插入图片通常通过controller.addImageSpan方法,但参数可能只接受图片的URI,没有直接设置headers的选项。因此,需要通过其他方式处理。
现将图片下载然后再插入RichEditor
使用 request.downloadFile 接口下载图片时,在请求头中添加 Cookie:
import { request } from '@kit.NetworkKit';
// 下载图片到应用沙箱路径
let downloadTask = request.downloadFile({
url: 'https://example.com/image.jpg',
header: {
Cookie: 'key=value' // 替换为实际 Cookie
},
filePath: '沙箱路径/image.jpg' // 指定本地保存路径
});
downloadTask.then((task) => {
task.onSuccess = (result) => {
// 下载成功,插入到 RichEditor
this.controller.addImageSpan('沙箱路径/image.jpg');
};
task.onFail = (err) => {
console.error('下载失败:', err);
};
});
通过 RichEditorController 的 addImageSpan 方法插入本地路径:
import { RichEditorController } from '@kit.ArkUIKit';
@Component
struct RichEditorExample {
controller: RichEditorController = new RichEditorController();
build() {
RichEditor({ controller: this.controller })
.onReady(() => {
// 插入本地图片(需等待下载完成)
this.controller.addImageSpan('沙箱路径/image.jpg');
})
}
}
楼主试试这个方法,
首先在在module.json5中添加网络权限:
{
"module": {
"requestPermissions": [
{ "name": "ohos.permission.INTERNET" }
]
}
}
使用@kit.NetworkKit发起带Cookie的请求,将图片转换为本地路径插入:
import { http } from '[@kit](/user/kit).NetworkKit';
// 步骤1:下载带Cookie的图片
async downloadImageWithCookie(url: string, cookie: string) {
let request: http.HttpRequestOptions = {
method: http.RequestMethod.GET,
header: { 'Cookie': cookie }, // 附加Cookie
connectTimeout: 60000,
readTimeout: 60000
};
let response = await http.createHttp().request(url, request);
if (response.responseCode === 200) {
return response.result; // 获取二进制数据
} else {
console.error('Download failed:', response.responseCode);
return null;
}
}
// 步骤2:将图片数据转换为可插入格式
async loadImageToRichEditor() {
let imageData = await this.downloadImageWithCookie(
'https://counselorcat.wisedu.com/wec-im-message/proxy/file/UVEjTTkIO6O',
'your_cookie_here'
);
if (imageData) {
// 方案A:保存为本地文件后引用
let path = ...; // 存储到应用沙箱路径
this.controller.addImageSpan(path, {
imageStyle: { size: [100, 100] }
});
// 方案B:直接使用Base64数据
let base64 = `data:image/jpeg;base64,${imageData.toString('base64')}`;
this.controller.addImageSpan(base64, {
imageStyle: { size: [100, 100] }
});
}
}
组件初始化时加载图片,原始代码改为:
RichEditor(this.options)
.onReady(() => {
this.loadImageToRichEditor(); // 替换原有的直接插入URL方式
})
在HarmonyOS Next的RichEditor中显示带Cookie的网络图片,需使用ImageSpan配合自定义网络请求。通过HttpRequest设置请求头携带Cookie,获取图片数据后转换为PixelMap,再创建ImageSpan插入。关键步骤包括配置网络权限、实现异步加载和图片缓存处理。
在HarmonyOS Next的RichEditor中显示带Cookie的网络图片,需要通过自定义图片加载器实现。由于安全策略限制,RichEditor默认不会携带Cookie请求图片资源。
解决方案如下:
- 自定义ImageSpan加载器:
import { ImageSpan, ImageLoader } from '@ohos.richtext';
class CustomImageLoader implements ImageLoader {
async loadImage(src: string): Promise<ImageSpan> {
// 创建自定义请求,携带Cookie
const request = new http.HttpRequest();
request.header['Cookie'] = 'your_cookie_here';
const response = await http.request(src, request);
const imageData = response.result as ArrayBuffer;
// 创建ImageSpan
return new ImageSpan(imageData);
}
}
- 在RichEditor中使用自定义加载器:
RichEditor(this.options)
.imageLoader(new CustomImageLoader()) // 设置自定义加载器
.onReady((controller) => {
this.controller.addImageSpan('https://your-image-url', {
imageStyle: {
size: [100, 100]
}
})
})
- 如果需要动态Cookie,可以从本地存储获取:
async loadImage(src: string): Promise<ImageSpan> {
const cookie = await Preferences.get('user_cookie');
const request = new http.HttpRequest();
request.header['Cookie'] = cookie;
// 其余加载逻辑...
}
关键点:
- 必须实现
ImageLoader接口的loadImage方法 - 使用
http模块发起带Cookie的请求 - 将获取的二进制数据转换为
ImageSpan - 通过
imageLoader()方法设置到RichEditor
这种方式可以绕过默认加载器的限制,确保带Cookie的图片正常显示。注意处理网络请求异常和Cookie过期情况。


