Angular HttpClient не включает указанные заголовки - PullRequest
0 голосов
/ 07 мая 2018

Я загружаю файл, используя Angular (5) HttpClient в качестве данных многоэлементной формы, и сталкиваюсь с проблемами с указанием заголовков. Я могу успешно загрузить файл, но не могу указать пользовательские заголовки.

Кажется, что Angular автоматически выбирает тип данных, которые я пытаюсь POST, и автоматически создает соответствующие заголовки (multipart/form-data, и так далее), но в процессе уничтожает указанные мной заголовки.

Кто-нибудь знает, что здесь может происходить?

Пример кода:

const formData = new FormData();
// File gets read by a FileReader, etc etc. 
// Important thing is that we're adding it to a multipart form

const imgBlob = new Blob([reader.result], { type: file.type });
formData.append('file', imgBlob, file.name);


let reqOpts = {
    params: new HttpParams(),
    headers: new HttpHeaders()
};

reqOpts.headers.append('Authorization', "Bearer YaddaYaddaYadda");

let url = this.api.url + "/media/add";

// Return the API request observable
this.http.post<boolean>(url, formData, reqOpts).subscribe(res => {

}, err => {

})

На стороне сервера я могу вызвать PHP getallheaders () и получить следующий результат:

{
    "Host": "dev.example.com",
    "Content-Type": "multipart\/form-data; boundary=----WebKitFormBoundaryrIDpbJCAcL63ueAA",
    "Origin": "http:\/\/ip-address-goes-here:8101",
    "Accept-Encoding": "br, gzip, deflate",
    "Connection": "keep-alive",
    "Accept": "application\/json, text\/plain, *\/*",
    "User-Agent": "Mozilla\/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit\/604.5.6 (KHTML, like Gecko) Mobile\/15D100",
    "Referer": "http:\/\/referer-ip-address-goes-here:8101\/",
    "Content-Length": "1055172",
    "Accept-Language": "en-us"
}

1 Ответ

0 голосов
/ 07 мая 2018

Ваша проблема здесь:

let reqOpts = {
    params: new HttpParams(),
    headers: new HttpHeaders()
};

Для того, чтобы фактически установить и расширить ваши параметры, вам нужно использовать .set() и назначить.

let params = new HttpParams().set('foo', foo).set('bar', bar);
let headers = new HttpHeaders().set(blah blah)
...