如何在 axios 中获取 onUploadProgress?

IT技术 javascript reactjs redux axios
2021-03-29 23:54:46

我对如何使用 axios 上传进度事件感到有些困惑。实际上我正在将大量文件存储到 aws s3 中。为此,如何获取上传进度?我需要这个功能onUploadProgress

目前我的 Post 请求是这样的:

export function uploadtoCdnAndSaveToDb(data) {
    return dispatch => {
        dispatch(showUnderLoader(true));
        return axios.post('/posttodb', {data:data},

        ).then((response) => {
            console.log(response.data)
        })
    }
}
2个回答

Axios 存储库有一个关于如何执行此操作的清晰示例:https : //github.com/mzabriskie/axios/blob/master/examples/upload/index.html

网站摘录

当你使用 axios 发出请求时,你可以传入请求配置。该请求配置的一部分是在上传进行时调用的函数。

const config = {
    onUploadProgress: progressEvent => console.log(progressEvent.loaded)
}

当您使用 axios 发出请求时,您可以传入此配置对象。

axios.put('/upload/server', data, config)

每当上传进度发生变化时,都会调用此函数。

只是对您的代码的注释

我还注意到您没有充分发挥 ES6 的潜力!

对象声明

对于这样的东西,它有一些很好的语法,例如,您已经定义了一个对象,例如: { data: data },但这{ data }已经足够了。

可能值得使用带有一些 linting 规则的linter,最常见的是AirBnB 风格指南

5mb 到 1mb @chris
2021-05-29 23:54:46
你上传的文件有多大?
2021-06-03 23:54:46
另外,如何取消两者之间的上传过程?
2021-06-06 23:54:46
如果您要处理多行,则使用 E​​S6 就可以了 onUploadProgress(progressEvent) { ... }
2021-06-17 23:54:46
谢谢克里斯,我会遵循你的规则是的,我是 es6 的新手。你的代码在上传的总字节数末尾打印,但我想要改变上传进度的数量
2021-06-19 23:54:46

只是想补充一些具有特定配置的人可能会想到的先前答案。

这与“问题”有关,可能结果是onUploadProgress可能只被调用一次或两次,通常一次是使用progressEvent.loaded === progressEvent.total

所以如果回调至少被调用一次,axios 或测量没有任何问题,实际上值是正确的。例如,如果您正在进行开发并且您的后端负责将数据上传到例如aws s3 存储桶,则您可能会遇到此问题

发生的情况是,在开发中,前端和后端通常在同一台机器上,并且发送数据包没有实时问题(即使对于大文件,将数据发送到开发后端几乎是即时的)

诀窍和不测量时间的地方(因为这是后端工作)是将数据传输到 s3,然后您必须等待Promise解决,但除非使用 Web 套接字等,否则您无法跟踪此进度。

大多数情况下,这不是生产环境中的问题,假设您在 aws 上,那么大部分时间都花在从用户向后端发送数据上,而后端部分(即 ec2)向 s3 发送数据确实良好的上传速度每 10MB 上传大约0.3(对于法兰克福地区),因此与用户 -> 后端数据传输相比,它可能可以忽略不计。

请参阅此链接与一些基准测试

无论如何,要测试onUploadProgress是否真的像您对大文件所期望的那样被多次调用,只需在开发人员工具的网络选项卡中切换网络连接即可。

选择慢3g为例进行测试

更重要的是:用它Custom: Add...来放入 1mbs、8mbs 等......
2021-05-25 23:54:46
要查看开发中的多个上传进度事件,请创建一个自定义网络节流配置文件,模拟 50KB/s 的上传速度:Custom > Add... > Add custom profile... > Upload > 500. 请注意,节流配置文件使用 kbit/s。所以 500 KB 实际上是 62.5 KB (500/8)。
2021-05-30 23:54:46