英雄联盟 |不能获取

Heroku | Cannot GET

我向 heroku 部署了一个 API。它的功能之一是文件上传。我创建了一个名为“uploads”的静态文件夹并使用 multer 包上传文件。

app.use('/api/uploads', uploadRouter);
app.use('/uploads', express.static(path.join(__dirname, '/uploads')));

以上代码片段来自server.js。下面是路由器和多路设置。

    const storage = multer.diskStorage({
  destination(req, file, cb) {
    cb(null, 'uploads/');
  },
  filename(req, file, cb) {
    cb(null, `${Date.now()}.jpg`);
  },
});

const upload = multer({ storage });

uploadRouter.post('/', upload.single('image'), (req, res) => {
  res.send(`https://app.herokuapp.com/${req.file.path}`);
});


uploadRouter.post('/imgs', upload.array('images'), (req, res) => {
    try{
      let filesArray = [];
      req.files.forEach(file => {
        filesArray.push(`https://app.herokuapp.com/${file.path}`)
      })
      res.status(201).send(filesArray);
  }catch(error) {
      res.status(400).send(error.message);
  }

});

有件事告诉我,我的方法远非理想。然而,在我引入多文件上传之前,它曾经完美地工作。现在,上传后的图片会在那里停留一小段时间(我可以通过 https://app.herokuapp.com/uploads/1623782012131.jpg 之类的链接访问它们)并在几分钟后消失。然后,这些 URL 抛出以下内容:

Cannot GET /uploads/1623782012131.jpg

问题是我在引入多文件上传之前上传的以前的图像仍然可以访问。我认为这与 heroku 文件大小限制有关,但事实并非如此,因为我只使用了 500mb 中的大约 50mb。可能是什么原因?

Heroku 的文件系统 ephemeral/short 已经存在。这意味着您保存在磁盘上的任何图像都将在您重新启动或部署您的应用程序后消失。您不能依赖 Heroku 的文件系统来存储需要保留更长时间的图像。在这里阅读更多:https://help.heroku.com/K1PPS2WM/why-are-my-file-uploads-missing-deleted

要获得可靠的图像存储,请查看 Cloudinary 或 AWS S3 等云存储解决方案。