我有点困惑,如何上传与axios进度事件.实际上我存储到aws s3的巨大数字文件.为此,如何获得上传进度?我需要这个函数onUploadProgress
目前我的帖子请求是这样的:
export function uploadtoCdnAndSaveToDb(data) {
return dispatch => {
dispatch(showUnderLoader(true));
return axios.post('/posttodb', {data:data},
).then((response) => {
console.log(response.data)
})
}
}
字符串
2条答案
按热度按时间cwxwcias1#
Axios存储库有一个关于如何做到这一点的明确示例:https://github.com/axios/axios/blob/master/examples/upload/index.html
摘自网站
当你用axios发出请求时,你可以传入请求配置。请求配置的一部分是上传过程中要调用的函数。
字符串
当你使用axios发出请求时,你可以传入这个配置对象。
型
当上传进度发生变化时,将调用此函数。
只是你代码上的一个注解
我还注意到你没有充分利用ES6的潜力!
它有一些很好的语法,例如,你定义了一个对象:
{ data: data }
,但是{ data }
就足够了。使用符合某些linting规则的linter可能是值得的,最常见的是AirBnB style guide
rt4zxlrg2#
只是想在前面的答案上加上一些有特定配置的人可能会来。
这与“问题”有关,可能会发现ondatadProgress只能被调用一次或两次,通常是用progressEvent.loaded = progressEvent.total调用一次。
因此,如果回调至少被调用一次,axios或measurement没有任何问题,实际上值是正确的。如果您正在进行开发,并且您的后端负责将数据上传到例如aws s3 bucket,则可能会遇到此问题。
在开发中,通常前端和后端都在同一台机器上,发送数据包没有真实的时间问题(即使是大文件,也几乎可以立即将数据发送到开发后端)
技巧和时间不被测量的地方(因为这是后端作业)是数据传输到s3,然后你必须等待promise解决,但你不能跟踪这个过程,除非使用web套接字等。
大多数时候,这不是生产环境中的问题,假设你在aws上,那么大部分时间都花在从用户发送数据到你的后端和后端部分(这是ec2)发送数据到s3有很好的上传速度,它是每10 MB上传约0.3秒(对于法兰克福地区),所以它可能是可以忽略不计的用户->后端数据传输相比。
看到这个链接与一些benchmarks.
无论如何,要测试onWebadProgress是否真的被多次调用,就像你对大文件所期望的那样,只需在开发人员工具的网络选项卡中切换网络连接。
x1c 0d1x的数据