kissarat
@kissarat
Node.js

Почему я не могу загрузить файл?

Не могу понять, почему загружаемый файл получает нулевой размер. Вот код, который загружает файл и записывает его в базу
function upload(req, res) {
    if (req.user.guest) {
      res
        .status({status: 401})
        .json(401)
    }
    else {
      const mime = req.headers['content-type']
      const size = +req.headers['content-length']
      const type = req.config.file.mime[mime]
      if (type && size) {
        if (size <= type.size) {
          const now = Date.now()
          const id = now.toString(36) + req.user.id.toString(36)
          const filename = id + '.' + type.ext[0]
          const tempfilename = path.join(os.tmpdir(), filename)
          const temp = fs.createWriteStream(tempfilename)
          temp.on('error', res.error)
          temp.on('close', function () {
            fs.rename(tempfilename, req.config.file.dir + '/' + filename, function (err) {
              if (err) {
                res.error(err)
              }
            else {
              const data = {
                id,
                mime,
                size,
                ip: req.headers.ip,
                name: req.params.name,
                user: req.user.id
              }
              res.promise(req.table('file').insert(data)
                .then(function () {
                  data.status = 201
                  data.success = true
                  data.url = '/files/' + filename
                  return data
                }))
            }
          })
        })
        req.pipe(temp)
      }
      else {
        res
          .status(413)
          .json({
            status: 413,
            error: {
              message: `Request entity ${mime} too large: ` + size
            }
          })
      }
    }
    else {
      res
        .status(415)
        .json({
          status: 415,
          error: {
            message: 'Unsupported media type: ' + type
          }
        })
    }
  }
}

И он раньше работал (насколько я помню), но теперь в файла нулевой размер. Код писался, когда был установлен Node.js 6.*, сейчас Node.js v7.7.3 В резуальтате получаю правильний ответ, но загружаемий файл имеет нулевой размер
{  
   "id":"j0l3hagb2",
   "mime":"image/jpeg",
   "size":221518,
   "ip":"127.0.0.1",
   "name":"stock-photo-142984111-1500x1000.jpg",
   "user":2,
   "status":201,
   "success":true,
   "url":"/files/j0l3hagb2.jpeg"
}

Используется свой фреймворк, которий расширяет express.js
  • Вопрос задан
  • 276 просмотров
Пригласить эксперта
Ответы на вопрос 1
@AtaZ
кто знает, тот поймет
Проверяйте права на запись в темповую папку и в итоговую. Правильный ответ говорит о том, что файл создался в темповой папке, но вот прочитать и перенести в боевую не удалось. Может место кончилось.

Ещё можно добавить вывод размера темпового файла.

Вспомнил, ещё зависит от владельца папок, ставьте права 777, если с ними работает а с 755 нет. значит проблема владельца.
Ответ написан
Ваш ответ на вопрос

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

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