У меня есть приложение реагирования, где пользователь может сделать сообщение с некоторыми изображениями.В зависимости от формата, на данный момент это может быть как URL, так и файл.В случае, если это файл, я хочу его кодировать в base64, а затем отправить запрос обратно на мой сервер.Для этого я реализовал функцию с условием проверки, является ли это файл
submitPostHandler = (e) => {
e.preventDefault();
const post = {
contents: this.state.content,
images: this.encodeURLHandler(this.state.images)
}
this.setState({ showLoading: true });
PostMapper.submitTextPost(post).then(
this.setState({showLoading: false})
);
}
внутри этой функции, когда я создаю объект Post, у меня есть функция для кодирования base64, если этоURL
encodeURLHandler = (images) =>{
const expression = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi;
const regex = new RegExp(expression);
let urls = [];
images.map(img =>{
if(!img.match(regex)){
urls.push(img);
const reader = new FileReader();
reader.readAsDataURL(urls);
reader.onload = () => {
img = reader.result.replace(/^data:(.*;base64,)?/, '');
if ((img.length % 4) > 0) {
img += '='.repeat(4 - (img.length % 4));
}
}
}
});
}
всякий раз, когда я запускаю незавершенную функцию, я получаю сообщение об ошибке:
TypeError: Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'.
причина в том, что я в моем дочернем компоненте преобразовал файл в ObjectUrl для отображения впользователь, есть ли способ, как я могу сделать еще одно условие в моем методе, чтобы преобразовать его обратно в файл, чтобы отобразить его.