【问题标题】:Heroku | Cannot GET赫罗库 |不能获取
【发布时间】:2021-08-31 18:12:28
【问题描述】:

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

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

以上代码 sn-p 来自 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。可能是什么原因?

【问题讨论】:

    标签: node.js express http heroku multer


    【解决方案1】:

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

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

    【讨论】:

    • 是的,感谢您的回答。我正在考虑为此目的切换到 AWS。但是仍然很好奇为什么我大约一个月前上传的图像仍然有效,而这些经过多次文件上传的图像却消失了。
    • 这些图像(一个月前)是否已提交到存储库?
    • 哦,是的。谢谢你。我真傻。我首先使用上传文件夹中的图像构建了我的网站,这些图像没有被 git 忽略,然后我将其推送到 heroku 存储库。所以切换到 AWS S3 或 Cloudinary 是关键。
    猜你喜欢
    • 2013-01-11
    • 1970-01-01
    • 2017-01-20
    • 2011-10-03
    • 2014-07-23
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 2014-07-20
    相关资源
    最近更新 更多