bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Удалить недокаченный файл?

Здравствуйте. Подскажите пожалуйста. Как можно удалить недокаченный файл: отмена пользователя, обрыв соединения? Для загрузки использую Multer. В событии req.on('close', ..) отлавливаю отмену соединения, но файл не удаляется (хотя в логах пишет про удаление), его и вручную удалить нельзя, вроде как бы stream его держит. Спасибо.

const pathApp = 'app';
const pathUploads = path.join(__dirname, '..', process.env.APP_PATH_UPLOADS, pathApp);
const filenameApp = 'еее.apk';
const filenameAppTmp = `tmp_${filenameApp}`;
const fullPathApp = path.join(pathUploads, filenameApp);
const fullPathAppTmp = path.join(pathUploads, filenameAppTmp);

const fileFilter = async (req, file, next) => {
  if (!fs.existsSync(pathUploads)) fs.mkdirSync(pathUploads);

  return next(null, true);
};

const storage = multer.diskStorage({
  destination(req, file, cb) {
    cb(null, pathUploads);
  },
  filename(req, file, cb) {
    cb(null, filenameAppTmp);
  }
});

const upload = multer({
  fileFilter,
  storage
});

routes.post('/upload', (req, res, next) => {
  req.on('close', async () => {
    fs.unlink(fullPathAppTmp, err => {
      if (err) return console.log(err);
      console.log('path/file.txt was deleted');
    });
  });

  upload.single('file')(req, res, next);

  req.on('end', () => {
    fs.rename(fullPathAppTmp, fullPathApp, err => {
      if (err) throw err;
    });
    res.status(204).send();
  });
});
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 1
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Удалять надо не сразу, а по прошествии времени
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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