Вы можете использовать FormData , чтобы прикрепить прочитанный файл и отправить в API.
onSelectFile(event) {
if (event.target.files && event.target.files[0]) {
this.uploadToServer(event.target.files[0]);
... rest of the code
}
uploadToServer(file) {
let formData: FormData = new FormData();
formData.append('fileName', file);
// call your api service to send it to server, send formData
}
EDIT
Попробуйте, если у вас нет возможности коснуться onSelectFile()
или вызвать другую функцию при загрузке файла.
_url = ''
set url(val) {
this._url = val;
if (val) {
this.dataURLtoFile(val);
}
}
get url() {
return this._url;
}
uploadedImage: File ;
dataURLtoFile(dataurl) {
const arr = dataurl.split(',');
const mime = arr[0].match(/:(.*?);/)[1];
const imageExtension = mime.split('/')[1];
const bstr = atob(arr[1]);
let n = bstr.length;
const u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
this.uploadedImage = new File([u8arr], `uploaded.${imageExtension}`);
}
При вызове API, возможно, когда вы нажимаете на кнопку,
uploadPersonaImage(e) {
// this.apiService.someMethod(this.uploadedImage);
}
Если вы хотите инициировать вызов API только при загрузке изображения, добавьте код dataURLtoFile()
в uploadPersonaImage()
и вызовите uploadPersonaImage()
из url
setter
Разъяснение
Вы понимаете, что означает event.target.src
(рассматривая e
как событие)?
Здесь event
означает событие нажатия / изменения, которое вы вызвали, когда вы
нажал на загрузку фото.
event.target
означает элемент DOM, для которого произошло событие.
event.target.src
даст вам src
значение атрибута
Элемент DOM, для которого вы инициировали событие изменения.
Теперь, вы говорите, это не сработает? Нет, потому что элемент, который вы щелкнули, - HTMLInputElement
, но src
находится под изображением внутри тега label
. А как вы собираетесь звонить uploadPersonaImage()
? что вызывает твой метод? Вы не ответили на это даже после того, как спросили столько раз.
В моем последнем редактировании я добавил код под установщик url
, который преобразует dataUrlFile
в реальный файл. Это полностью зависит от вашего сервера, как вы хотите сохранить файл. Как файл или как dataUrl? Если вы хотите отправить его в виде файла, следуйте указаниям, которые я добавил в ответе, если вы хотите сохранить как dataUrl, а затем напрямую сохраните содержимое this.url
в вызове API.