Heroku应用程序的免费层是否支持文件上传?

时间:2018-10-26 20:50:25

标签: node.js heroku upload fs multer

我正在测试MEAN堆栈应用程序。我有一个Node.js后端,用于处理文件上传(通过fs/multer)。但是,在生产中尝试击中它时,我收到503错误。

在本地,一切正常。我正在使用Heroku的免费套餐;该层是否被锁定以不允许文件上传?

我当前正在尝试(已经尝试了几次)的上传只有36kb(.png)。

浏览了我的日志,找到了503-

2018-10-26T20:39:24.352297+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=POST path="/media/upload" host=www.example.co.uk request_id=5388711c-bc99-4e42-9dbd-7b645fbefb43 fwd="90.222.69.255" dyno=web.1 connect=1ms service=130ms status=503 bytes=0 protocol=http 2018-10-26T20:39:24.306975+00:00 app[web.1]: (node:20) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated. 2018-10-26T20:39:24.307037+00:00 app[web.1]: (node:20) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated. 2018-10-26T20:39:24.318818+00:00 app[web.1]: fs.js:113 2018-10-26T20:39:24.318822+00:00 app[web.1]: throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs 2018-10-26T20:39:24.318824+00:00 app[web.1]: ^ 2018-10-26T20:39:24.318826+00:00 app[web.1]: 2018-10-26T20:39:24.318828+00:00 app[web.1]: Error: ENOENT: no such file or directory, mkdir './uploads/18'

1 个答案:

答案 0 :(得分:1)

文件上传不应自行生成HTTP 503。您应该检查日志(通过heroku logs)以获取有关失败原因的更多信息。话虽如此,即使您解决了这个问题,您可能也需要对处理文件上传的方式进行根本性的改变。

所有Heroku层都有一个ephemeral filesystem。每当您的dyno重新启动时,对文件系统所做的任何更改都会丢失,happens frequently(每天至少一次)重新启动。

official recommendation将上传的文件放到第三方服务(如Amazon S3)上。 multer-s3库应该可以提供帮助。