Хорошо, через некоторое время вдали от ноутбука я разобрался, как это сделать.В принципе, концепция была правильной: сначала загрузить изображение, а затем установить его в качестве значения для возможного запроса на публикацию статьи.
Теперь у меня есть правильная публикация статьи с использованием 4 различных изображений, которые теперь определяются индивидуально, и ниже я объясню, как я это сделал, если кому-то понадобится это в будущем.
Первое, что мне нужно было сделать, это определить выбранные изображения как типы, используя класс изображений - тогда это назначит изображение как объект, а не как поддельную строку пути:
selectedAvatarImage: Image;
selectedFeaturedImage: Image;
selectedAdvertImage: Image;
selectedHeaderImage: Image;
Затем мне нужно было создать новый объект, который в конечном итоге будет использовать вышеуказанные свойства и существующие значения ключей для объекта статьи.Они также должны быть определены как типы, чтобы гарантировать, что мы знаем, что мы пытаемся отправить:
title: string;
sub_title: string;
description: string;
text_content: string;
author_name: string;
twitter: string;
facebook: string;
instagram: string;
video_url: string;
ad_link: string;
При выборе изображения нам нужно загрузить его, но также убедиться, что оно настроено на выбранное правообраз.Таким образом, при наличии 4, небольшой переключатель пригодится для ответа данных после загрузки:
uploadImage Функция
uploadImage(key: string, imageFile) {
if (null) {
return alert('Please choose an image first')
}
imageFile = this.fileData;
let reader = new FileReader();
reader.readAsDataURL(imageFile);
reader.onload = () => {
let data = reader.result;
this.configService.uploadImage({
title: imageFile.name,
name: imageFile.name,
type: imageFile.type,
size: imageFile.size, data
}).subscribe(response => {
imageFile = response.data;
switch (key) {
case 'author_avatar': this.selectedAvatarImage = response.data; console.log('avatar',this.selectedAvatarImage);
break;
case 'featured_image': this.selectedFeaturedImage = response.data; console.log('feature',this.selectedFeaturedImage);
break;
case 'advertising_banner': this.selectedAdvertImage = response.data; console.log('advert',this.selectedAdvertImage);
break;
case 'header_image': this.selectedHeaderImage = response.data; console.log('header',this.selectedHeaderImage);
}
});
}
};
это успешно определяет, какое изображениебыл загружен.
затем в функции CreateFile следующим образом:
createArticle() {
let newArticle = {
feed_type: this.selectedFeed,//image one
title: this.title,
sub_title: this.sub_title,
description: this.description,
text_content: this.text_content,
author_name: this.author_name,
author_avatar: this.selectedAvatarImage,//image two
video_url: this.video_url,
header_image: this.selectedHeaderImage,//image three
featured_image: this.selectedFeaturedImage,//image four
twitter: this.twitter,
facebook: this.facebook,
instagram: this.instagram,
advertising_banner: this.selectedAdvertImage,
ad_link: this.ad_link,
}
this.articleService.postArticle(newArticle)
.subscribe(
this.startLoading();
response => {
if (response) {
this.article = response.data;
this.stopLoading();
} else {
this.stopLoading();
}
}
)
}
в компоненте .html
Мне нужно было удалить [(ngModel)] извходные данные файла, чтобы убедиться, что я не получил те же ошибки, что и эта бедная душа: Ссылка
<input
type="file"
name="header_image"
(change)="fileProgress($event)"
accept=".jpg,.svg,.png,.jpeg">
<button class="update" (click)="uploadImage('header_image', selectedHeaderImage)">Upload</button>
Затем он отправляет все нужные вещи во все нужные места.
Как примечание, я думаю, что главным препятствием для меня было стремление думать об элегантности, а не о результате.Я ценю, что этот процесс довольно длительный, и я уверен, что будет более чистый и динамичный способ продвинуться вперед.Но для того, что требуется для этой функции, это работает, и именно это было наиболее важным, учитывая доставку.
Надеюсь, это поможет кому-то в будущем.