Попробовав несколько разных вариантов конфигов, разные способы чтения файла и с небольшой помощью людей на этой странице, я наконец все заработал.Я надеюсь, что это сэкономит время и проблемы другим людям, которые не очень знакомы с клиентским веб-разработчиком.Я использую обещания Q здесь, но вы можете использовать любое обещание, и я уверен, что есть несколько дефектов (например, обработка ошибок), но по крайней мере у меня работает загрузка файлов!:
const readFile = (fileURI) => {
return Q.Promise((resolve, reject) => {
try {
const xhr = new XMLHttpRequest();
xhr.open('GET', fileURI);
xhr.responseType = 'blob';
xhr.onload = () => {
const blob = xhr.response;
const reader = new FileReader();
reader.onload = () => {
const data = reader.result.split(',').pop();
resolve(data);
};
reader.onerror = () => {
reject('error reading file');
};
reader.readAsDataURL(blob);
};
xhr.onerror = () => {
reject('unable to read image data');
};
xhr.send();
} catch (e) {
reject(e.message);
}
});
};
const uploadImage = (fileURI) => {
readFile(fileURI)
.then((data) => {
const formData = new FormData();
formData.append('base64', data);
$.ajax({
type: 'POST',
url: '<endpoint url>',
contentType: false,
processData: false,
headers: {
'cache-control': 'no-cache'
},
data: formData,
beforeSend: (xhr) => {
xhr.setRequestHeader('Authorization', this.auth);
},
success: (res) => {
logger.info(`request success: ${JSON.stringify(res)}`);
},
error: (error) => {
logger.info(`request unsuccessful: ${error.statusText}`);
}
});
})
.catch((e) => {
logger.info(`An error occurred: ${e}`);
})
};
Мне понадобилось полтора дня, чтобы понять это!Я исправлю обещания теперь, когда у меня все работает.