HarmonyOS 鸿蒙Next 下载网络文件 request.download下载到本地的文件大小为0b且没有报错误码 日志正常

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 下载网络文件 request.download下载到本地的文件大小为0b且没有报错误码 日志正常

下载文件使用了documentPicker.save以及request.downloadFile,选择器使用正常,下载任务正常且downloadTask.on('progress’可以正常打印文件实际大小, downloadTask.on('complete’后加的提示 也显示正常。 下载文件之后在文件管理内查看文件,大小为0b,真机和模拟器问题一样


更多关于HarmonyOS 鸿蒙Next 下载网络文件 request.download下载到本地的文件大小为0b且没有报错误码 日志正常的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
downloadTask.on('complete', () => {
  //将文件复制到文件夹中

  const documentSaveOptions = new picker.DocumentSaveOptions(); // 创建文件管理器保存选项实例

  documentSaveOptions.newFileNames = ["aaa.doc"]; // 保存文件名(可选)

  const documentViewPicker = new picker.DocumentViewPicker;

  documentViewPicker.save(documentSaveOptions)

    .then(async (documentSaveResult) => {

      // 获取到到图片或者视频文件的URI后进行文件读取等操作

      let uri = documentSaveResult[0];

      console.info('pub uri:' + uri)

      // 沙箱路径文件

      let sanFile = fs.openSync(this.localFilePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)

      let pubFile = fs.openSync(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)

      // 将文件从沙箱路拷贝到公共路径

      fs.copyFileSync(sanFile.fd, pubFile.fd)

      console.log("-------")

    })

  console.log('下载完成')

})}

尝试下查看当前下载路径(沙箱路径–localFilePath)下,是否已经存在相同文件,当前版本调用这个api后文件若已下载,重复调用会报13400002

//下载

downLoad(context: common.Context, item: listItem) {

  const tokens = PreferencesUtil.getPreferenceValue('MyPreferences', 'token', '')

  let token: token

  tokens

    .then((res) => {

      token = JSON.parse(JSON.stringify(res)) as token

      console.log("获取", token)

      let filesDir = context.filesDir;

      this.localFilePath = filesDir + '/' + item.docName + '.doc'

      //文件如果已经存在,就删除,下载之前先检查删除

      fs.access(this.localFilePath).then((res: boolean) => {

        if (res) {

          console.info("file exists" + "--localFilePath:" + this.localFilePath);

          fs.unlink(this.localFilePath)

        } else {

          console.info("localFilePath file not exists");

        }

      }).catch((err: BusinessError) => {

        console.error("access failed with error message: " + err.message + ", error code: " + err.code);

      });

      try {

        // 执行下载任务

        request.downloadFile(context, {

          url: item.docUrl,

          // filePath: uris[0].split('file:')[1],

          filePath: this.localFilePath,

          header: {

            'Content-Type': 'application/json;charset=UTF-8',

            'Authorization': 'Basic am9ic2xpbmtfY2xpZW50QTpqb2JzbGlua19jbGllbnRBX3NlY3JldA==',

            'Jobslink-Auth': 'bearer ' + token

          }

        }).then((data: request.DownloadTask) => {

          let downloadTask: request.DownloadTask = data;

          downloadTask.on('complete', () => {

            try {

              //配置文件保存服务

              const documentSaveOptions = new picker.DocumentSaveOptions();

              //检查newFileNames是...

              console.log('newFileNames:' + JSON.stringify(item.docName))

              documentSaveOptions.newFileNames = [JSON.stringify(item.docName)];

              documentSaveOptions.fileSuffixChoices = ['.doc', '.pdf', '.xlsx', '.jpg', '所有文件(*.*)|.*'];

              let documentPicker = new picker.DocumentViewPicker(context);

              //选择器

              documentPicker.save(documentSaveOptions).then((documentSaveResult: Array<string>) => {

                // 获取到到图片或者视频文件的URI后进行文件读取等操作

                let uri = documentSaveResult[0];

                console.info('test uri:' + uri)

                console.log('DocumentViewPicker.save successfully,', JSON.stringify(documentSaveResult));

                // 沙箱路径文件

                let sanFile = fs.openSync(this.localFilePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)

                let pubFile = fs.openSync(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)

                // 将文件从沙箱路拷贝到公共路径

                fs.copyFileSync(sanFile.fd, pubFile.fd)

                console.log("-------")

                promptAction.showToast({

                  message: '下载完成已保存',

                  duration: 1500

                })

              }).catch((err: BusinessError) => {

                console.error('DocumentViewPicker.save failed with err: ' + JSON.stringify(err));

              });

            } catch (error) {

              let err: BusinessError = error as BusinessError;

              console.error('DocumentViewPicker failed with err: ' + JSON.stringify(err));

            }

          });

          downloadTask.on('progress', (receivedSize: number, totalSize: number) => {

            console.info(`DownloadFile totalSize: ${totalSize} ,downloadSize:${receivedSize}`);

          });

          downloadTask.on('fail', (err: number) => {

            console.info(`DownloadFile err: ${err}`);

          });

        }).catch((err: BusinessError) => {

          console.error(`Failed to request the download. Code: ${err.code}, message: ${err.message}`);

        })

      } catch (err) {

        console.error(`Failed to request the download. err: ${JSON.stringify(err)}`);

      }

    })

}

更多关于HarmonyOS 鸿蒙Next 下载网络文件 request.download下载到本地的文件大小为0b且没有报错误码 日志正常的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对HarmonyOS鸿蒙Next下载网络文件时,request.download方法下载到本地的文件大小为0b且没有报错误码、日志正常的问题,可能的原因及解决方案如下:

  1. URL验证:首先确认下载链接(URL)是否正确且文件真实存在。尝试在浏览器中直接访问该URL,看是否能正常下载文件。

  2. 权限检查:确保应用已获取存储权限。在鸿蒙系统中,即使日志正常,权限问题仍可能导致文件写入失败。

  3. 文件路径:检查指定的文件保存路径是否正确,以及该路径下的目录是否已创建。路径错误或目录不存在也会导致文件无法正确写入。

  4. 下载进度监听:通过监听下载进度回调,检查下载过程中是否有数据流动。如果下载进度始终为0,则可能是网络问题或服务器响应问题。

  5. 网络状态:确认设备网络状态良好,且服务器允许从当前网络环境下载文件。

  6. 服务器响应:检查服务器对下载请求的响应头,确保返回的是文件内容而非错误信息或重定向。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部