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

Posted

技术标签:

【中文标题】Heroku 应用程序的免费层是不是支持文件上传?【英文标题】:Does the free tier of Heroku apps support file upload?Heroku 应用程序的免费层是否支持文件上传? 【发布时间】:2019-03-31 15:39:48 【问题描述】:

我正在测试 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'

【问题讨论】:

这有帮助吗? github.com/expressjs/multer/issues/287 我已经通过这种方法检查目录是否存在(如果不存在则创建它) - 我相信问题可能来自我以特定方式指定文件路径,这是不可接受的(可能出于非常正当的原因)我在heroku上设置的节点部署......我将重写这个应用程序的负载以使用外部存储(感谢你的建议)所以我不得不离开那个怎么样! 【参考方案1】:

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

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

official recommendation 是将上传的文件放到 Amazon S3 等第三方服务上。 multer-s3 库应该能够提供帮助。

【讨论】:

谢谢@Chris,很好的回答。我同意外部存储将是一个改进,它只是一个小应用程序,但我认为我可以摆脱本地存储。已使用我在您的建议中找到的相关日志更新了我的问题。在我看来,应用程序找不到/创建正确的文件夹。 @jmcgrory,如果您将文件存储在本地,则无法绕过临时文件系统。如果您可以定期丢失文件,也许这不是问题。临时存储可能没问题。但是,如果您想保留它们,则需要将它们存储在其他地方。

以上是关于Heroku 应用程序的免费层是不是支持文件上传?的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件直接从 Django admin 上传到 Amazon S3?缓解 Heroku 应用程序错误(超时)

在 Heroku 迁移后访问上传到 Parse.com 的文件 [关闭]

是否可以将简单的 html 和 javascript 文件结构上传到 heroku?

运行 Heroku 应用程序未显示上传文件中的更改

如何在 Heroku 上上传大文件(尤其是视频)

上传文件时出现 AWS/Heroku 错误