У меня есть приложение Angular 1.x, которое ожидает получить загрузку бинарного файла (pdf) с помощью вызова $http.post()
. Проблема в том, что я хотел бы получить сообщение об ошибке обработки, которое отправлено как json. Я могу сделать это с помощью конфигурацииМожет Угловой установить ответType после получения ответа?
headers: {
'Accept': 'application/pdf, application/json'
}
Проблема в том, у меня есть, чтобы установить responseType: 'arraybuffer'
, иначе PDF двоичный экранированы (или изменены таким образом, что он не загружается). Однако это предотвращает чтение или интерпретацию json.
Как я могу иметь оба?
Редактировать: Я собираюсь попытаться разъяснить; возможно, мое понимание неверно.
$http({
method: 'POST',
url: "/myresource",
headers: {
'Accept': 'application/pdf, application/json'
},
responseType: 'arraybuffer'
})
.then(
function(response) {
// handle pdf download via `new Blob([data])`
}, function(response) {
// pop up a message based on response.data
}
)
В случае, когда я возвращаюсь блок PDF данных и статус HTTP 200, первая функция обрабатывает ответ и предлагает пользователю сохранить файл. Однако, если состояние является ошибкой (422), значение response.data
не определено. Я предполагаю, что это связано с тем, что responseType
препятствует правильной обработке json.
Если я удаляю строку responseType
, данные об ошибках считываются правильно, но при сохранении pdf некоторые из байтов файлов неправильны и эффективно повреждены. Я предполагаю, что это потому, что файл закодирован, потому что javascript ожидал строку.
не отправлять ошибки сервера как данные успеха. отправьте их как ошибки. отправка 200 успешных сообщений с сообщением об ошибке для обработки только смущает потребителя API. – Claies
@Claies, я не отправляю ошибку как статус 200 (это 422). –
@georgeawg, я устанавливаю соответствующий тип контента для каждого ответа. –