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



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

在我的本地计算机上,我可以简单地将文件写入 Web 应用程序根目录下的文件夹,例如/output,然后将我的浏览器重定向到http://localhost:4000/output/1.csv以获取文件。

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

即使我手动使用heroku run bash并在项目根目录中创建一个/output文件夹并在那里创建一个文件,当我尝试将我的浏览器定向到那里时(例如https://myapp.herokuapp.com/output/1.csv,它只是说"找不到页面"。

根本就不可能对希罗库进行这样的行动吗?我认为既然我们可以自由地在临时文件系统上创建文件,我们也应该能够从浏览器访问它,但事情似乎比这更复杂。

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

plug Plug.Static,
at: "/output", from: Path.expand("output/"), gzip: false

到我的endpoint.ex.显然它适用于localhost但不适用于 Heroku?

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

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

当然,您可以将生成的CSV存储在某个地方(例如数据库甚至ets(并"懒惰"地生成它们。

最新更新