【问题标题】:Could not upload file into folder using Node.js and Heroku无法使用 Node.js 和 Heroku 将文件上传到文件夹
【发布时间】:2019-07-05 02:56:14
【问题描述】:

上传文件时遇到问题。我正在尝试使用 Node.js 将文件上传到文件夹中,并且我的应用程序部署在 Heroku 中。我在下面提供我的代码。

var multer  = require('multer')
var storage =multer.diskStorage({
  destination: function (req, file, callback) {
    callback(null, './uploads');
  },
  filename: function (req, file, callback) {
    callback(null, Date.now()+'-'+file.originalname);
  }
});
var upload = multer({ storage : storage });
app.post('/api/users/save-card-file',upload.single('file'), function (req, res, next) { 
   var data={'filename':res.req.file.filename};
   res.send(data);
})

在这里,我正在尝试将文件上传到 uploads 文件夹中,并且在 localhost 中运行时工作正常,但我正在将我的应用程序上传到 Heroku 并且响应即将到来,但没有文件上传到 uploads 文件夹中。在 Heroku 上上传文件后,我收到以下响应。

{
    "filename": "1503419364442-btechmarksheet.jpg"
}

uploads 文件夹中没有文件。它在 localhost 中的工作文件,但在 Heroku 中我遇到了此类问题。

【问题讨论】:

    标签: node.js heroku multer


    【解决方案1】:

    来自https://devcenter.heroku.com/articles/dynos#ephemeral-filesystem

    每个 dyno 都有自己的临时文件系统,以及最近部署的代码的新副本。在 dyno 的生命周期中,它的运行进程可以将文件系统用作临时暂存器,但是任何其他 dyno 中的进程都看不到写入的文件,并且在停止或重新启动 dyno 时,任何写入的文件都将被丢弃。例如,每当由于应用程序部署而更换测功机时都会发生这种情况,并且作为正常测功机管理的一部分,大约每天一次。

    Heroku 的文件系统不能用作持久文件系统。 Dyno 在后续请求之间的一些空闲时间后重新启动,重新初始化文件系统,这就是即使上传成功,您以后也找不到文件的原因。

    【讨论】:

    • 解决方案是什么?你能帮帮我吗?
    • 使用第三方服务(如 AWS S3)保存文件,或者如果文件是图像,imgur 和 cloudinary 是很好的服务。
    • 我正在保存图片。所以没有办法将文件保存到heroku内的文件夹中吗?
    • 是的,您需要使用一些服务。无法将其保存在 Heroku 的文件夹中。
    • 其实我用的是Node.js,所以哪一个会是好的服务提供者。
    猜你喜欢
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 2015-08-06
    • 2021-12-30
    • 2021-04-13
    • 2016-02-28
    • 2021-07-18
    • 1970-01-01
    相关资源
    最近更新 更多