До недавнего времени это работало нормально.
При загрузке файла я отслеживаю процесс загрузки следующим образом:
uploadImage = uri => {
const image = Platform.OS === 'ios' ? uri.replace('file://', '') : uri;
const Blob = RNFetchBlob.polyfill.Blob;
const fs = RNFetchBlob.fs;
window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest;
window.Blob = Blob;
let uploadBlob = null;
const imageRef = firebase
.storage()
.ref('categories/')
.child(`${this.props.userData.uid}`)
.child(`${this.state.img}`);
const mime = this.state.isVideo ? 'video/mp4' : 'image/jpg';
fs.readFile(image, 'base64')
.then(data => {
return Blob.build(data, {type: `${mime};BASE64`});
})
.then(blob => {
uploadBlob = blob;
this.uploadTask = imageRef.put(blob, {contentType: mime});
this.uploadTask.on(
'state_changed',
snapshot => {
// Observe state change events such as progress, pause, and resume
// Get task progress, including the number of bytes uploaded and the total number of bytes to be uploaded
const progress =
(snapshot.bytesTransferred / snapshot.totalBytes) * 100;
LayoutAnimation.easeInEaseOut();
this.setState({ uploadProgress: progress });
console.log(`Upload is ${progress}% done`);
switch (snapshot.state) {
case firebase.storage.TaskState.PAUSED: // or 'paused'
console.log('Upload is paused');
break;
case firebase.storage.TaskState.RUNNING: // or 'running'
console.log('Upload is running');
break;
}
},
error => {
// Handle unsuccessful uploads
},
() => {
// Handle successful uploads on complete
},
);
});
};
Вот как я отображаю число в мой компонент:
<Text>
{Math.trunc(this.state.uploadProgress)}%
</Text>
Я устанавливаю номер в состоянии моих компонентов, а затем показываю его пользователю. По какой-то причине в последнее время число превышает 100, оно показывает что-то большое, например 38154017.
Когда я регистрирую прогресс, я вижу, где он идет не так:
console.log(`Upload is ${progress}% done`);
LOG Upload is 0% done
LOG Upload is 38.15395542514653% done
LOG Upload is 38.15395542514653% done
LOG Upload is 38154017.271191105% done
LOG Upload is 100% done
По какой-то причине прогресс прогресс умножает третий журнал на 100? Это происходит только примерно через месяц, и после исследования люди, кажется, все еще делают это следующим образом.
Вот журналы для bytesTransferred и totalBytes:
console.log(snapshot.bytesTransferred);
LOG bytesTransferred 0
LOG bytesTransferred 0262144
LOG bytesTransferred 262144
LOG bytesTransferred 262144524288
LOG bytesTransferred 786432
LOG bytesTransferred 786432176078
console.log(snapshot.totalBytes);
LOG totalBytes 962510
LOG totalBytes 962510
LOG totalBytes 962510
LOG totalBytes 962510
LOG totalBytes 962510
LOG totalBytes 962510
LOG totalBytes 962510
Дон Не знаю, изменила ли Firebase что-то, но что бы это ни было, мне бы очень хотелось услышать комментарии людей!
Приветствия.