HarmonyOS鸿蒙Next中aboutToAppear中接口报错{"code":2300023,"message":"Failed writing received data to disk/application"}

HarmonyOS鸿蒙Next中aboutToAppear中接口报错{“code”:2300023,“message”:“Failed writing received data to disk/application”} 【问题描述】:接口报错,有时候能调通,不止一个接口报错,多个接口都会报同一个错误

【问题现象】:{“code”:2300023,“message”:“Failed writing received data to disk/application”}

【版本信息】:

开发工具版本:

DevEco Studio 6.0.0 Release

Build Version: 6.0.0.858, built on September 24, 2025

Runtime version: 21.0.6+8-b631.39 amd64 (JCEF 122.1.9)

VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.

Toolkit: sun.awt.windows.WToolkit

Windows 10.0

GC: G1 Young Generation, G1 Concurrent GC, G1 Old Generation

Memory: 2048M

Cores: 12

Registry:

  idea.plugins.compatible.build=IC-243.24978.46

Non-Bundled Plugins:

  com.intellij.plugins.vscodekeymap (243.21565.122)

手机系统版本:

模拟器:

cke_2407.png

Api语言版本:

cke_5082.png

【复现代码】:最小复现问题的demo(涉及隐私信息,若需要可联系提供)

【尝试解决方案】:列出已尝试的解决方案及测试结果


更多关于HarmonyOS鸿蒙Next中aboutToAppear中接口报错{"code":2300023,"message":"Failed writing received data to disk/application"}的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

开发你好,

根据报错有三个可能的原因。

  1. 文件大小超过5M限制:HTTP请求默认最大接收数据量为5M

  2. 写入权限问题:应用无磁盘写入权限

  3. 数据接收中断:未完整接收数据时调用了destroy()方法

看了你的回复如果排除1和3,ohos.permission.READ_MEDIA和ohos.permission.WRITE_MEDIA在API12已经废弃,可申请受限权限ohos.permission.READ_IMAGEVIDEOohos.permission.WRITE_IMAGEVIDEO以读取媒体库的图片与视频。如果还未解决是否可以提供最小复现demo。

更多关于HarmonyOS鸿蒙Next中aboutToAppear中接口报错{"code":2300023,"message":"Failed writing received data to disk/application"}的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HTTP请求展示数据

概述

HTTP请求是客户端与服务器之间进行数据交换的基础协议。通过HTTP请求,客户端可以向服务器发送请求并接收响应,实现数据的展示和交互。

请求方法

  • GET: 用于获取资源
  • POST: 用于提交数据
  • PUT: 用于更新资源
  • DELETE: 用于删除资源

请求结构

HTTP请求由以下部分组成:

  • 请求行(方法、URL、协议版本)
  • 请求头(元数据)
  • 请求体(可选,用于POST/PUT等)

响应结构

HTTP响应包括:

  • 状态行(协议版本、状态码、状态消息)
  • 响应头(元数据)
  • 响应体(实际数据)

状态码

  • 200 OK: 请求成功
  • 404 Not Found: 资源未找到
  • 500 Internal Server Error: 服务器内部错误

数据格式

常见的数据格式包括:

  • JSON
  • XML
  • HTML

注意事项

  • 确保请求URL正确
  • 处理可能的错误状态码
  • 考虑数据安全性

2300023 向磁盘/应用程序写入接收数据失败

支持设备PhonePC/2in1TabletTVWearableLite Wearable

错误信息

Failed to write the received data to the disk or application.

错误描述

向磁盘/应用程序写入接收数据失败。

可能原因

1.应用没有写文件权限或待下载的文件超过5M。

2.上一次请求数据未接受完毕便调用destroy销毁导致接收数据不完整。

处理步骤

排查应用权限及待下载的文件大小。 参考:HTTP错误码-错误码-Network Kit(网络服务)-网络-系统 - 华为HarmonyOS开发者

解决办法 1、调整下载文件大小限制

http.createHttp().request(url,
  {
    method: http.RequestMethod.GET,
    connectTimeout: 60000,
    readTimeout: 60000,
    maxLimit: 100 * 1024 * 1024,
  },
  // ...
)

2、使用流式传输(推荐大文件场景)

// 在dataReceive中拼接图片数据
let imageChunks: ArrayBuffer[] = [];
httpRequest.on('dataReceive', (data: ArrayBuffer) => {
  imageChunks.push(data);
  console.info('收到分片,大小:' + data.byteLength + ' bytes');
});
httpRequest.on('dataEnd', () => {
  // 计算总长度
  let totalLength = imageChunks.reduce((sum, chunk) => sum + chunk.byteLength, 0);
  let fullImage = new Uint8Array(totalLength);
  // 拼接所有分片数据
  let offset = 0;
  for (let chunk of imageChunks) {
    fullImage.set(new Uint8Array(chunk), offset);
    offset += chunk.byteLength;
  }
  console.info('图片接收完成,总大小:' + totalLength + 'bytes');
  const base64 = btoa(String.fromCharCode(...fullImage));
  const imgSrc = `data:image/png;base64,${base64}`;
  console.info('可用于展示的图片 src:', imgSrc);
});

参考:加载或者传输超大图片遇到错误码2300023该如何处理-行业常见问题-理财保险类行业实践-场景化知识 - 华为HarmonyOS开发者

错误原因

2300023错误表示向磁盘/应用程序写入接收数据失败,常见原因包括:

  1. 文件大小超过5M限制:HTTP请求默认最大接收数据量为5M
  2. 写入权限问题:应用无磁盘写入权限
  3. 数据接收中断:未完整接收数据时调用了destroy()方法

解决方案

方案一:调整数据量限制(适用于5M~100M数据)HttpRequestOptions中设置maxLimit参数扩大接收限制:

import http from '@ohos.net.http';

let httpRequest = http.createHttp();
httpRequest.request(
  "https://example.com/image.jpg",
  {
    method: http.RequestMethod.GET,
    maxLimit: 100 * 1024 * 1024 // 设置为100MB
  },
  (err, data) => {
    if (!err) {
      console.log("Received data length: " + data.result.length);
    } else {
      console.error("Error code: " + err.code + ", message: " + err.message);
    }
    httpRequest.destroy();
  }
);

方案二:流式传输(推荐用于超大文件) 使用requestInStream()边接收边处理,避免内存溢出:

import http from '@ohos.net.http';
import fs from '@ohos.file.fs';

let httpRequest = http.createHttp();
httpRequest.requestInStream(
  "https://example.com/large_image.jpg",
  {
    method: http.RequestMethod.GET
  },
  (err, response) => {
    if (err) {
      console.error("Request failed: " + err.message);
      return;
    }
    
    // 创建可写流保存文件
    let filePath = pathDir + '/large_image.jpg';
    let writeStream = fs.createStreamSync(filePath, 'w+');
    
    // 逐块处理响应数据
    let body = response.getInStream();
    body.on('data', (chunk: ArrayBuffer) => {
      writeStream.writeSync(chunk);
    });
    
    body.on('end', () => {
      writeStream.closeSync();
      console.log("File saved successfully");
    });
    
    body.on('error', (err) => {
      console.error("Stream error: " + err.message);
      writeStream.closeSync();
    });
  }
);

关键注意事项

  1. 权限配置:在module.json5中添加存储权限声明:

    "requestPermissions": [
      { "name": "ohos.permission.INTERNET" },
      { "name": "ohos.permission.READ_MEDIA" },
      { "name": "ohos.permission.WRITE_MEDIA" }
    ]
    
  2. 超时处理:大文件传输需设置合理超时时间(通过connectTimeout/readTimeout参数)

  3. 资源释放:完成传输后必须调用httpRequest.destroy()释放资源

技术限制说明:当expectDataType指定为http.HttpDataType.OBJECT时,最大数据长度限制为65536字节,超大文件必须使用流式传输方案。

{ "name": "ohos.permission.READ_MEDIA" },
{ "name": "ohos.permission.WRITE_MEDIA" }

权限不是在API12已经废弃了吗,

  1. 文件大小超过5M限制:HTTP请求默认最大接收数据量为5M
  2. 写入权限问题:应用无磁盘写入权限
  3. 数据接收中断:未完整接收数据时调用了destroy()方法

问题一:这个已经用maxLimit限制了 问题二:需要换成什么权限? 问题三:我没有调用这个方法,

开发你好, 如果排除问题一和问题三,ohos.permission.READ_MEDIA和ohos.permission.WRITE_MEDIA在API12已经废弃,可申请受限权限ohos.permission.READ_IMAGEVIDEO或ohos.permission.WRITE_IMAGEVIDEO以读取媒体库的图片与视频。如果还未解决是否可以提供最小复现demo。

该错误代码2300023通常由文件系统权限或存储空间不足引起。在鸿蒙Next的aboutToAppear生命周期中,检查应用是否已获取ohos.permission.WRITE_USER_STORAGE权限。确认data目录可写入且设备存储余量充足。若使用网络请求,验证返回数据格式是否符合预期,避免数据异常导致写入失败。排查应用沙箱路径访问权限设置。

这个错误码2300023通常与文件系统写入权限或存储空间不足有关。在HarmonyOS Next中,aboutToAppear生命周期内调用接口时,如果应用没有正确的文件读写权限,或者设备存储空间已满,就可能出现该错误。

建议检查以下方面:

  1. 确认应用已申请ohos.permission.READ_MEDIA和ohos.permission.WRITE_MEDIA权限
  2. 验证设备存储空间是否充足
  3. 检查接口调用时是否在尝试写入过大文件
  4. 确保文件路径在应用沙箱目录范围内

由于错误间歇性出现,可能是并发写入冲突或临时存储空间不足导致。建议在接口调用中加入重试机制,并优化数据写入逻辑。

回到顶部