Я «публикую» файл zip в серверном приложении через конечную точку REST. Если я отправлю POST через Postman или веб-интерфейс приложения, я получу опубликованный zip-файл, который действителен. Я могу обернуться скачать его и открыть, и т. Д. c.
Если я попытаюсь сделать то же самое с моим кодом и Ax ios, попытка серверного приложения разархивировать и использовать загруженный контент завершится неудачей. Если я DL архив, он поврежден. Тот факт, что тот же архив работает через Postman и UE приложения, говорит мне, что это либо PEBKA C, либо, возможно, проблема с самим Ax ios. Вот код, который я использую для отправки в конечную точку. Обратите внимание, что в конце я на самом деле записываю данные, которые я помещаю в локальный файл на моем компьютере, в виде zip-файла, чтобы я мог убедиться, что не делаю ничего глупого, когда читаю файл через fs. Локальная копия файла, который я создал, в порядке.
Обратите внимание, что я на самом деле жестко кодирую и длину контента. Я тестирую один файл и проверяю правильность длины с помощью fs.statSyn c, а также то, что она соответствует длине содержимого, которую я вижу при загрузке с помощью Postman и пользовательского интерфейса приложения.
var uploadFile = (data, fileInfo) => new Promise(resolveUpload => {
console.log("Starting Upload API call for:", fileInfo.description);
axios.post(aepServer + '/api/v1/files',
data, {
jar: cookieJar,
withCredentials: true,
headers: {
'Content-Type': 'application/octet-stream',
'path': fileInfo.path,
'description': fileInfo.description,
'Content-Length': 354198,
'Accept-Encoding': 'gzip, deflate, br',
'Accept': '*/*',
'Connection': 'keep-alive'
},
// DANGER: allow self-signed certs workaround which I must remove
httpsAgent: new https.Agent({
rejectUnauthorized: false,
})
}).then((response) => {
fileResponse = response.data;
console.log('\n', chalk.bgMagenta('FILE UPLOADED: '), response);
fs.writeFileSync('c:\\data\\newfile.zip', data, 'binary');
resolveUpload(fileResponse);
})
.catch((err) => {
console.log("AXIOS ERROR: ", err);
})
});
Здесь что-то не так? Глядя на объект ответа, я вижу что-то, что заставляет меня чесать голову:
headers: {
Accept: '*/*',
'Content-Type': 'application/octet-stream',
path: '/Workspaces/Public%20Apps/UFOs.yxzp',
description: 'UFO Sitings in the US, 1995 to present',
'Content-Length': 532362,
'Accept-Encoding': 'gzip, deflate, br',
Connection: 'keep-alive',
Cookie: 'ayxSession=s%3Ac39f55a3-b219-43a5-9f8a-785e1222c81c.QR4KI8uXaQlL9axqkO8AkyabPVt3i37nGbz%2FJef0eqU',
'User-Agent': 'axios/0.19.2'
},
Посмотрите на длину содержимого: 532362 байта. Кажется, что значение ~ 354k, которое я жестко запрограммировал в заголовках, как-то игнорируется. Может ли это быть моей проблемой? [Кстати, если я использую один и тот же код для загрузки файла CSV или TXT, все в порядке - похоже, это относится только к сжатым файлам]
РЕДАКТИРОВАТЬ: Welp, похоже, Ax ios переопределяет это свойство и я ничего не могу с этим поделать: Ax ios установить Content-Length вручную, nodeJS. Теперь вопрос заключается в том, если установка этого значения приведет к изменению файла и ПОЧЕМУ значение неверно. Когда я делаю data.length, я получаю значение 354198.