可以通过浏览器访问存储在Heroku的临时文件系统中的文件吗?

时间:2017-08-19 21:33:50

标签: file heroku download elixir phoenix-framework

我一直在编写一个在Heroku上部署的应用程序。到目前为止,一切都很好。但是,还有一个我无法解决的最后一步:我需要从数据库中即时生成CSV文件,让用户下载文件。

在我的本地计算机上,我只需将文件写入Web应用程序根目录下的文件夹,例如# Labeling the clusters centers = clusterer.means_ ,然后将浏览器重定向到/output以获取文件。

然而,无论我如何尝试修改它,相同的代码在Heroku上一次又一次失败。它要么抱怨无法写入文件,要么无法将浏览器重定向到正确的路径。

即使我手动使用http://localhost:4000/output/1.csv并在项目根目录中创建heroku run bash文件夹并在那里创建文件,当我尝试将浏览器定向到那里时(例如/output),它只是说“找不到页面”。

毕竟不可能对Heroku执行这样的操作吗?我认为既然我们可以自由地在短暂的文件系统上创建文件,我们也应该可以从浏览器访问它,但事情似乎比这更复杂。

我正在使用Phoenix框架,我已经添加了

https://myapp.herokuapp.com/output/1.csv

到我的plug Plug.Static, at: "/output", from: Path.expand("output/"), gzip: false 。显然它适用于endpoint.ex但不适用于Heroku?

如果确实我想要做的事情是不可能的,我将转向亚马逊S3。但是,我希望尽可能避免使用S3,因为这应该是一个非常简单的任务,我不想添加另一组凭据/额外的复杂性来管理。或者有没有其他方法来实现我正在尝试做的事情,而不必先将文件写入文件系统,然后将用户重定向到它?

1 个答案:

答案 0 :(得分:1)

我知道它没有严格回答您的问题,但如果您不介意每次请求生成CSV,您可以使用Controller.send_download/3并提供任意有效负载作为下载(在您的情况下, CSV的内容。

当然,你可以将生成的CSV存储在某个地方(比如数据库甚至ets)并“懒洋洋地”生成它们。