【问题标题】:Download file from server into Ionic2 App从服务器下载文件到 Ionic2 App
【发布时间】:2017-04-05 14:10:47
【问题描述】:

我需要在我的Ionic2 应用程序中实现一项功能,用户可以将特定的视频文件下载到 Ionic2 应用程序中。

在检查Ionic Native 部分后,我发现以下插件可用:

  • 文件
  • 文件选择器
  • 文件打开器
  • 文件路径

但找不到诸如“cordova-plugin-file-transfer”之类的特定方法作为DOWNLOAD存在的任何内容。

有什么出路?

请提出建议。

【问题讨论】:

  • 下载,你到底是什么意思兄弟..?文件是否存储在服务器上,并且您想将其保存在手机的文件系统中..?您上面提到的所有插件都用于打开手机内部存储器/卡存储中的文件..
  • @RajaYogan - 是的。我需要像 WhatsApp 这样的功能。用户将有一个下载按钮 - 点击后 - 视频文件将被下载到手机的存储中并保存以供将来使用。

标签: android ios cordova angular ionic2


【解决方案1】:

您应该使用“Transfer”插件在ionic2中下载文件

你可以通过这个命令安装插件

ionic plugin add cordova-plugin-file-transfer
npm install --save @ionic-native/transfer

然后导入

import { Transfer, FileUploadOptions, TransferObject } from '@ionic-native/transfer';

设置构造函数

constructor(private transfer: Transfer, private file: File) { }

然后使用这个函数通过url下载文件

download() {
const url = 'http://www.example.com/file.pdf';
fileTransfer.download(url, this.file.dataDirectory + 
'file.pdf').then((entry) => {
console.log('download complete: ' + entry.toURL());
}, (error) => {
// handle error
});
}

希望对你有帮助 您也可以使用此插件上传文件

【讨论】:

  • 如果没有绝对路径怎么办?以及如何处理此类 url,例如 url = "server/controller/test?emp=10" ;让 destPath = this.file.externalDataDirectory + 'file.pdf'; this.fileTransfer.download(url, destPath, true).then((entry) => { this.test = '下载完成:' + entry.toURL() }, (error) => { this.test = '下载错误:' + error.json() });
【解决方案2】:

您可以为此使用Transfer 原生插件。

此插件允许您上传和下载文件。

Git Repo.

 ionic plugin add cordova-plugin-file-transfer
 npm install --save @ionic-native/transfer

【讨论】:

  • 非常感谢。我在那里看到了一个下载方法,我认为这会起作用。再次感谢。
【解决方案3】:

首先。 transfer 此处大家所指的插件已弃用。如果有替代品,您永远不应该使用已弃用的插件。

很高兴,Ionic 为您提供了替代方案 Native Http plugin

HTTP 服务具有 uploadFiledownloadFile 方法,可用于处理文件的上传/下载。

downloadFile 方法有 4 个参数:urlbodyheadersfilepath

在最简单的情况下,这个方法的调用是这样的:

this.nativeHttp.downloadFile(urlWithFile, {}, {}, fileNameToSave)

它返回用FileEntry 实例解析的promise,您可以在将来使用它从文件系统中读取(如果需要)

fileNameToSave 你可以从File 类中获得。基本上,它可以是this.file.tempDirectory + fileName,或者您可以从file 中选择另一个目录,例如this.file.dataDirectory + fileName

再次重申,您绝不应该使用已弃用的插件/包。它们被称为已弃用是有原因的

附:如果你想打开下载的文件,你可以使用@ionic-native/file-opener 插件,如下所示:

this.file.resolveLocalFilesystemUrl(fileEntry.toURL())
         .then((entry: FileEntry) => {  
             entry.file(meta => {
                 this.fileOpener.open(fileEntry.toURL(), meta.type)
             }, error => {});
         })

【讨论】:

    【解决方案4】:

    你可以简单地使用下载插件

     ionic cordova plugin add cordova-plugin-file-transfer
    

    【讨论】:

      【解决方案5】:

      应该像下面这样

      1. 添加导入

        从 '@ionic-native/transfer' 导入 { Transfer, TransferObject };

      2. 构造函数

        constructor(私转:Transfer) { }

      3. 创建文件传输实例

        const fileTransfer: TransferObject = this.transfer.create();

      4. 最终代码

        fileTransfer.download("你的 URL", "你的 URLmime tyoe").then((entry) => {

        },(错误)=> { // 处理错误 });

      就是这样。

      谢谢

      【讨论】:

        猜你喜欢
        • 2011-04-25
        • 2021-09-28
        • 2015-06-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多