【问题标题】:keep track react-native-fs download progress跟踪 react-native-fs 下载进度
【发布时间】:2017-12-27 03:41:33
【问题描述】:

使用react-native-fs从url下载文件,当下载进度达到100%时,我会调用另一个函数。但是,RNFS.downloadFile 无法正确跟踪进度。

_downloadFile = () =>{
  const downloadDest = `${RNFS.ExternalDirectoryPath}/Monstro/${((Math.random() * 1000) | 0)}.jpg`;
  let DownloadFileOptions = {
    fromUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/Boothferry_Road%2C_Goole.jpg/220px-Boothferry_Road%2C_Goole.jpg",         
    toFile: downloadDest,           
    begin: this._downloadFileBegin,
    progress: this._downloadFileProgress,
    background:false,
    progressDivider:1
  };

  RNFS.downloadFile(DownloadFileOptions);
}

_downloadFileBegin = () =>{
  console.log("Download Begin");
}

_downloadFileProgress = (data) =>{
  const percentage = ((100 * data.bytesWritten) / data.contentLength) | 0;
  const text = `Progress ${percentage}%`;
  console.log(text);
  if(percentage == 100) //call another function here
}

不是每次console.log_downloadFileProgress 中都显示Progress 100%,所以我很难检查进度。我是否错过了某些设置,或者有任何其他方法可以跟踪进度

【问题讨论】:

    标签: reactjs react-native react-native-fs


    【解决方案1】:

    您好,我按照 RNFS npm 指南使用它来实现

    https://www.npmjs.com/package/react-native-fs

    对于进度条,我使用了库

    React Native Progress Circle

    Link for below line of code

    downloadFile(options: DownloadFileOptions): { jobId: number, promise: Promise<DownloadResult> }
    

       type DownloadFileOptions = {
       fromUrl: string;          // URL to download file from
       toFile: string;           // Local filesystem path to save the file to
      headers?: Headers;        // An object of headers to be passed to the server
      background?: boolean;     // Continue the download in the background after the app terminates (iOS only)
      discretionary?: boolean;  // Allow the OS to control the timing and speed of the download to improve perceived performance  (iOS only)
      cacheable?: boolean;      // Whether the download can be stored in the shared NSURLCache (iOS only, defaults to true)
      progressDivider?: number;
      begin?: (res: DownloadBeginCallbackResult) => void;
      progress?: (res: DownloadProgressCallbackResult) => void;
      resumable?: () => void;    // only supported on iOS yet
      connectionTimeout?: number // only supported on Android yet
      readTimeout?: number       // supported on Android and iOS
    };

    我在这里实现上面这样的代码行

    RNFS.downloadFile({
         fromUrl: encodedfileURL,
         toFile: downloadfilePath,
         //headers
         background: true, **// Continue the download in the background after the app terminates (iOS only)**
         discretionary: true, **// Allow the OS to control the timing and speed of the download to improve perceived performance  (iOS only)**
         cacheable: true, **// Whether the download can be stored in the shared NSURLCache (iOS only, defaults to true)**
      
         begin: (res: DownloadBeginCallbackResult) => {
           console.log("Response begin ===\n\n");
           console.log(res);
         },
         progress: (res: DownloadProgressCallbackResult) => {
          //here you can calculate your progress for file download
    
           console.log("Response written ===\n\n");
           let progressPercent = (res.bytesWritten / res.contentLength)*100; // to calculate in percentage
           console.log("\n\nprogress===",progressPercent)
           this.setState({ progress: progressPercent.toString() });
           item.downloadProgress = progressPercent;
           console.log(res);
         }
       })
         .promise.then(res => {
           console.log("res for saving file===", res);
           return RNFS.readFile(downloadfilePath, "base64");
    })

    【讨论】:

      【解决方案2】:

      RNFS 在下载完成时提供回调,请尝试以下操作:

      RNFS.downloadFile(DownloadFileOptions).promise.then((r) => {
                     //call another function here
        });
      

      【讨论】:

        【解决方案3】:

        你需要在 DownloadFileOptions 中将此作为进度选项传递:

        progress: (data) => this._downloadFileProgress(data)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多