vertically-challenged
@vertically-challenged

На сервер приходит Buffer длиннее, чем я отправляю с фронта, как это исправить?

Есть предположение, что при получении данных и выполнении JSON.stringify(req.body) я получаю строку в UTF-16, и это все ломает, но я не знаю, насколько это верное предположение, и даже если так, то я не понимаю, как это исправлять.

Код на фронте:

function uploadFile(file) {
  file.arrayBuffer().then((arrayBuffer) => {
    console.log(arrayBuffer.byteLength)
    fetch('/', {
      method: 'POST',
      headers:{
        'Content-Type': 'application/x-www-form-urlencoded',
        'charset': 'utf8'
      },  
      body: arrayBuffer
    })
    .then((res) => { 
      res.json().then((data) => {
        // window.location.href = data.url
      })
    })
    .catch(() => { /*TODO: обработать ошибки*/})
  })
}


Код на сервере:

router.post('/', (req, res) => {
  const text = JSON.stringify(req.body).toString('utf8')
  const fileBuffer = new Buffer.from(text, 'binary')
  console.log('byteLength: ', Buffer.byteLength(fileBuffer))
  const zip = new JSZip()
  zip.loadAsync(fileBuffer, {
    createFolders: true, 
  }).then((response) => {
    response.forEach(entry => console.log("внутри файл", {entry}))
  })
  res.send({
    url: `test`
  })
})
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
zkrvndm
@zkrvndm
Архитектор решений
Ты не правильно данные отправляешь. Во первых, у тебя абсолютно некорректные заголовки, когда отправляешь бинарные данные заголовки можно не прописывать, браузер сам их пропишет. Во вторых, почему ты пытаешься отправить arrayBuffer? Откуда он у тебя? Отправляй File или Blob при помощи FormData, тогда проблем не будет.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы