Тип детали Multiform не работает в Angular - PullRequest
1 голос
/ 06 апреля 2020

setup: с использованием Angular 6

http версия - "@ angular / http": "^ 6.1.9",

Я попытался опубликовать файл csv, используя данные формы из нескольких частей: заголовок, но это делает запрос неудачным. Кажется, что Browser всегда отправляет тип контента как «application- json». Я попробовал много подходов, которые были даны в inte rnet, чтобы изменить тип контента, но ничего не работает. Некоторые из них, которые я пробовал, устанавливают тип контента как неопределенный, который выдает ошибку в http. js file , пусть браузер обнаружит, что проигнорировал установку типа контента , который также не удался. Пожалуйста, помогите мне в этом

groupBulkUpload(file) {  
    const formData = new FormData();
    formData.append('file', file);
    // commented the below lines
    // formData.append('file', file, { type: 'text/csv' }));
    // let header = new HttpHeaders()
    // .set("Content-Type" , `multipart/form-data; boundary=${formData._boundary}`)
    // let options = { headers: header };

    let url = this.getAnyConfigUrl("rate");
    return this.http.post(url,formData)
  }

 //calling the api
 const blob = new Blob([csvData]);
    var f = new File([blob] , "filename.csv", {type: 'text/csv', lastModified: new Date().getDate()})
    this._config.groupBulkUpload(f).subscribe(val=>{
      console.log(val)
    })

Обновлено: браузер всегда принимает это как Json тип. Так что он не смог обнаружить формат CSV, это мое предположение. Любая идея?

Заголовки запроса: enter image description here

Полезная нагрузка запроса: enter image description here

1 Ответ

1 голос
/ 06 апреля 2020

Проверьте, используете ли вы перехватчик для перехвата http-запроса и добавьте тип данных JSON.

Вам не хватает третьего параметра в методе добавления (который является необязательным), но вы можете передать имя файла в качестве третьего аргумента. Для файлов formData.append вы можете передать имя файла в качестве третьего аргумента. если мы опускаем третий аргумент для типа blob, тогда имя файла по умолчанию будет blob.

Параметры:

name Имя поля, данные которого содержатся в значении.

значение Значение поля. Это может быть USVString или Blob (включая подклассы, такие как File). Если ничего из этого не указано, значение преобразуется в строку.

имя файла Необязательно Имя файла, сообщаемое серверу (USVString), когда BLOB-объект или файл передаются в качестве второго параметра. , Имя файла по умолчанию для объектов Blob - «blob». Имя файла по умолчанию для объектов File - это имя файла.

Попробуйте и удалите этот вызов из перехватчика.

groupBulkUpload(file) {
    const formData = new FormData();
    formData.append('file', file, "filename.csv");
    let url = this.getAnyConfigUrl("rate");
    return this.http.post(url, formData);
}
//calling the api
const blob = new Blob([csvData]);
var f = new File([blob], "filename.csv", { type: 'text/csv', lastModified: new Date().getDate() })
this._config.groupBulkUpload(f).subscribe(val => {
    console.log(val)
})
...