无法使用 Ionic Native HTTP 将文件保存到设备

问题描述 投票:0回答:1

我们有一个使用 Angular 7 和 Ionic 4 开发的移动应用程序。不久前我们进行了渗透测试,为了合规,我们更改了应用程序中文件传输的方式。我们没有直接通过 API 获取文件 url,而是收到一个内容类型为

application/octet-stream
的 url,然后使用以下方法下载文件并将其保存到设备存储中:

downloadFileTransfer(url, fileName) {
  const directoryPath = this.device.platform === 'Android' ? this.file.dataDirectory : this.file.documentsDirectory;
  const filePath = directoryPath + fileName;
  alert("url:" + url);
  alert("filePath:" + filePath);
  this.nativeHTTP.downloadFile(encodeURI(url), {}, {}, filePath).then(response => {
    this.appService.toastTipSuccess('success: ' + response, false);
    alert('response: ' + JSON.stringify(response));
  }).catch(err => {
    this.appService.toastTip('failure: ' + err, false);
  });
}

在真实的 Android 设备上使用此代码,我可以很好地看到 url 和 filePath 被发出警报,并且 downloadFile 回调后的响应警报可以通过包含该文件实际路径的

response
对象触发。保存于。然而,检查设备存储后,尽管响应回调成功触发,但设备中实际上没有保存任何内容。

顺便说一句,这是许多其他替代方案失败后的最新尝试:

saveAs
createObjectURL
fileTransfer.download
。尽管其中许多方法可以在网络浏览器中工作,但没有一个可以在真正的移动设备上的独立应用程序中工作。

任何见解或帮助将不胜感激,因为这个问题已经困扰我们的团队几个星期了。

angular ionic-framework ionic4 ionic-native
1个回答
0
投票

可能有不同的原因,即使清单中没有权限也会影响您保存文件检查的方式Android权限

检查您是否在 Manifest 上拥有这些权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

您使用的是 Cordova 还是电容器?

我以前是用Cordova开发的,由于一些插件过时,不得不迁移到Capacitor,而且也和文件管理有关。

新版本的 Android 已升级安全性,因此,如果您拥有 Android 手机,则 Android 可能不允许,具体取决于您保存的位置 < 10 available, try testing if the file is saved in your desired folder, if it does, your problem is with permissions.

您是否尝试过 FileSystem 等 Ionic 插件来管理此文件? 文件系统

致以诚挚的问候,希望它对您的问题有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.