OnUploadProgress仅被调用一次

时间:2020-09-17 13:22:38

标签: node.js reactjs react-native axios apisauce

我正在尝试在我的React Native应用程序上跟踪数据上传的进度。我使用插件apiSauce调用本地运行的服务器(具有baseURL的节点服务器:192.xxx.x.xx“:9000 /)。

在前面,我使用“ apisauce”和以下代码调用了我的api:

const apiClient = create({
  baseURL: "http://192.xxx.x.xxx:9000/api",
});

return apiClient.post(endpoint, myData, {
    onUploadProgress: (progress) => {
      console.log(progress.loaded / progress.total);
    },
  });

从那以后,除了控制台中的几条日志外,例如:0.1,0.2、0.3,...,0.9、1.0,但现在得到的只是一个日志:1。

我不明白为什么onUploadProgress仅被触发一次,我试图限制用于测试的android虚拟设备上的网络,并且还使用baseURL运行服务器:127.0.0.1似乎无法解决我的问题。

提前致谢

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,代码也很好(类似于您发布LePetitPrince的代码),问题在于在本地执行此操作时的速度(它立即上载,因此仅生成了一份进度报告)。

要真正在控制台上查看进度,我去了一个10MB的图像文件(该文件应该可以工作:https://commons.wikimedia.org/wiki/File:Pizigani_1367_Chart_10MB.jpg),并在DevTools上将网络更改为Slow 3G,然后我看到了几个呼叫取得进展。

您可以参考this github issue以获得更多详细信息。

答案 1 :(得分:0)

在花了相当长的时间测试上述建议的答案后,Internet速度和10MB图像受到限制,当1时,返回值console.log(progress.loaded / progress.total);仍然遇到相同的问题

我对文件大小超过25mb的其他较大图像进行了多次尝试。也没有运气。因此,我走了极端,最后发现问题仍然存在-文件大小不足以使算法在完全上传之前记录所有以前的值。

所以我的方法是像其他人一样使用React Native Debugger将Internet Speed降低到3G。 Where you can select your network speed in React Native Sebugger

在那之后,您将需要刷新您的应用程序,以使更新的网络加速并在模拟器上运行。

最后一步是对该功能使用非常大的图像。我发现一些图像大小超过200MB on this site

为节省您的时间,我在这里为您提供了一个网址: https://eoimages.gsfc.nasa.gov/images/imagerecords/73000/73726/world.topo.bathy.200406.3x21600x10800.png

只需复制并粘贴它即可替换现有的uri,您将能够看到按预期记录的多个比率。

enter image description here

请注意,这只是为了让您正确查看代码功能。您需要将uri编辑回正确的上载地址。

希望这对您有帮助。如果有人觉得这有帮助,我将不胜感激。干杯! :)