#javascript #angular #api #form-data #image-upload
#javascript #угловой #API #форма-данные #загрузка изображения
Вопрос:
Я пытаюсь опубликовать файл изображения с данными формы в angular. который отлично работает в postman
В Postman в разделе заголовки я установил..
Тип содержимого: составные / данные формы,
токен: (токен пользователя)
и в теле есть два поля askusImg: (выбранный файл изображения),
feedbackID: 144
с api_key в качестве параметров при отправке POST-запроса изображение успешно вставляется в Postman, но в моем проекте появляется ошибка.
HTML
<input type="file" id="ssImg" [(ngModel)]="scShots" [ngModelOptions]="{standalone: true}" (change)="fileChange($event)" class="form-control m-input" name="screenshot" multiple size="10" >
<br>
<div class="col-sm-12 form-group">
<button (click)="feedbackFormSubmit()" class="btn m-btn--pill btn-primary m-btn m-btn--custom" type="submit">Send</button>
</div>
TS
imgFile;
fileChange(event) {
let fileList: FileList = event.target.files[0];
this.imgFile = fileList;
};
feedbackFormSubmit(){
let form_Data = new FormData();
let askUsID = 144;
let api = BlankVars.scShotAPI; //correct as checked
form_Data.append('askusImg', this.imgFile, this.imgFile.name);
form_Data.append('feedbackID', askUsID);
this._POST_api_Service.POST_ScreenShot(api, form_Data).subscribe(res => {
console.log("res", res);
})
}
PostService.ts
POST_ScreenShot(api, postData) {
let localToken = JSON.parse(localStorage.getItem('currentUser')).token;
let api_key = 'Ij5DN44MDtnQv2I8zdAJg0xCGasLGJL6Jc6L4OOU';
let scShotUrl = GlobalVariable.BASE_API_URL api '?api_key=' api_key;
let headersComCat = new Headers();
headersComCat.append('token', localToken);
headersComCat.append('Content-Type', 'multipart/form-data');
let optionsComCat = new RequestOptions({ headers: headersComCat });
return this.http.post(scShotUrl, postData, optionsComCat)
.map((res: Response) => res.json())
.catch((error: any) => {
if (error.status === 401) {
window.alert("Session Timeout. Please Login Again.");
//localStorage.clear();
this._router.navigate(['/logout']);
return Observable.throw(new Error(error.status));
}
});
}
Поскольку я проверил свой код localToken и ключ API также совпадают со значениями, которые я передал в postman. Но я получаю эту ошибку.
ошибка
Вы указали ‘undefined’ там, где ожидался поток. Вы можете предоставить Observable , Promise, Array или Iterable .
Могу ли я узнать, что нужно изменить?
Комментарии:
1. Попробуйте выдать ошибку
catch
независимо от статуса. Это может помочь в отладке2. отображается ошибка: статус: 400, statusText: «Неверный запрос»
Ответ №1:
измените заголовок «токен» с авторизацией и введите «Предъявитель» токен в качестве значения.