Как загрузить файл CSV через REST API в Angular? - PullRequest
0 голосов
/ 06 февраля 2020

В моем html У меня есть:

 name="file" type="file"
 accept=".csv"

В тс: я получаю файл - $event.target.files.item(0);

Затем я передаю его в службу

  uploadCSVFile( file) {
    const uploadedFile = new FormData();
    uploadedFile.append( 'file', file, file.name);
    const url = `MyURL`;
    return this.http.post(url, uploadedFile);
  }

Проблема в том, что в нем указано, что File должен иметь текст contentType / csv. Но когда я добавляю заголовки -

{headers:  new HttpHeaders().append('Content-Type', 'text/csv')}

Жалуется, что запрос не является составным.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Проблема связана с несовпадением типов MIME. Тип MIME файлов не распознается как одинаковый на разных платформах. Файл .csv в OSX распознается как text / csv, тогда как в Windows он распознается как application / vnd.ms-excel.

Вот решение - строка изменения:

 uploadedFile.append( 'file', new Blob([file], { type: 'text/csv' }), file.name);
0 голосов
/ 06 февраля 2020

вам нужно указать тип контента как multipart , вы можете изменить свой код, как указано ниже

uploadCSVFile( file) {
        let formData:FormData = new FormData();
        formData.append('uploadFile', file, file.name);
        let headers = new Headers();
        /** In Angular 5, including the header Content-Type can invalidate your request */
        headers.append('Content-Type', 'multipart/form-data');
        headers.append('Accept', 'application/json');
        let options = new RequestOptions({ headers: headers });
        return this.http.post(url, formData, options)
}

, другой способ - использовать

headers.append('enctype', 'multipart/form-data');
...