Сохранить изображение URL для пользователя в SailsJS

Я создаю API, используя Sails JS v1.0.0

У меня есть действие по загрузке изображения на сервер, и оно работает отлично, но проблема в том, что я хочу сохранить URL-адрес изображения, чтобы пользователь загрузил изображение. Это изображение профиля пользователя.

Код, кажется, работает нормально, но я получаю ошибку в терминале после загрузки изображения. Я думаю, что-то с обратными вызовами.

Вот мой контроллер:

let fs = require('fs');

module.exports = {

    upload : async function(req, res) {
      req.file('image').upload({ dirname : process.cwd() + '/assets/images/profile' }, function(err, uploadedImage) {
        if (err) return res.negotiate(err);
        let filename = uploadedImage[0].fd.substring(uploadedImage[0].fd.lastIndexOf('/')+1);
        let uploadLocation = process.cwd() +'/assets/images/uploads/' + filename;
        let tempLocation = process.cwd() + '/.tmp/public/images/uploads/' + filename;
        fs.createReadStream(uploadLocation).pipe(fs.createWriteStream(tempLocation));
        res.json({ files : uploadedImage[0].fd.split('assets/')[1] })
      })
    }

};

About the read stream to the.tmp folder, I wrote it to make the image available the moment it gets uploaded.

I tried to query for the user right before the

res.json({ files : uploadedImage[0].fd.split('assets/')[1] })

line, but it gives me an error in the terminal.

What's the best way to implement this code?

User.update({ id : req.body.id }).set({ image : uploadedImage[0].fd.split('images/')[1] });

1 ответ

Решение

Вы загружаете изображения в "/assets/images/profile" и пытаетесь получить их из "/assets/images/uploads/". Также неверный путь в переменной tempLocation. Измените свой код на следующий, и он, надеюсь, начнет работать

upload : async function(req, res) {
  req.file('image').upload({ dirname : process.cwd() + '/assets/images/profile' },
  async function(err, uploadedImage) {
  if (err) return res.negotiate(err);
  let filename = uploadedImage[0].fd.substring(uploadedImage[0].fd.lastIndexOf('/')+1);
  let uploadLocation = process.cwd() +'/assets/images/profile/' + filename;
  let tempLocation = process.cwd() + '/.tmp/public/images/profile/' + filename;
  fs.createReadStream(uploadLocation).pipe(fs.createWriteStream(tempLocation));

  await User.update({ id : req.body.id }).set({ image : uploadedImage[0].fd.split('images/')[1] });

  res.json({ files : uploadedImage[0].fd.split('assets/')[1] })
})
},
Другие вопросы по тегам