CherryPoppins

CherryPoppins

File download phoenix

I am creating a csv and saving it to the static folder like this:

def get_file_path() do
    file_path = "#{:code.priv_dir(:my_app)}/static/myfolder/#{Ecto.UUID.generate()}.csv"
  
    File.mkdir_p!(Path.dirname(path_to_priv_static <> "/myfolder/"))

    {:ok, file_path}
  end

def write() do
  {:ok, file_path} = get_file_path()
  file = File.open!(file_path, [:write, :utf8])
  
  ...write csv...
  
  File.close(file)
end

This works fine and Phoenix is setup to serve static files out of my_folder folder. The issue is that after a .csv is create if I paste https://.../my_folder/<generated_ecto_uuid>.csv into the address bar it downloads the file. If i paste it in the address bar again and hit enter it takes me to a page “Not Found” and nothing is downloaded. If i refresh the tab and then paste the address in the address bar again it downloads fine, paste in the address bar agin and hit enter back to “Not Found” page. rinse repeat.

So the CSVs are being saved in the priv>static>... directory. There is also an assets>static directory that does not seem to display the same behavior as above when I try to download a file from it using the url, it works everytime i paste and hit enter. Also weird, this problem only happens on prod. Locally I can paste the csv link in the address bar and download as many times as I want without having to refresh the tab in between. Anyone have any ideas whats up or a better way to save the csv to avoid issues this directory might be having?

Marked As Solved

al2o3cr

al2o3cr

How are you hosting the application? I’ve seen similar behavior on PaaS hosting like Heroku, where each dyno has a separate local filesystem; if the upload and the download don’t hit the same one the file won’t be found.

Also Liked

APB9785

APB9785

Creator of ECSx

How about AWS S3?

derek-zhou

derek-zhou

The correct folder to store run time generated, user downloadable files shall be priv/static/... not assets/static/... the latter is a source dir for assets. There must be something else wrong in your code; check your console for messages.

03juan

03juan

Just to be clear, is this just a typo when you wrote out the post? Because there’s a difference in your path names my_folder and myfolder

Where Next?

Popular in Questions Top

greenz1
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
JeremM34
Hello, how can I check the Phoenix version ? Thanks !
New
shahryarjb
Hello, I have map which I want to convert it to string like this: the map: %{last_name: "tavakkoli", name: "shahryar"} the string I ne...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
vegabook
I’m brand new to Phoenix and I have stripped one of the demo applications to the bone. I just want to get an svg up on the screen. Here i...
New

Other popular topics Top

WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
stefanluptak
Hello everybody, usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
aesmail
Hello guys, I have finally made it. I created an admin interface for a framework. It’s been on my todo list for years and with the curre...
New
KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 36432 110
New
boundedvariable
I am going through the kafka architecture. All the features what the kafka is providing are already in Erlang. I would like hear your opi...
New
JakeBecker
TL;DR: I’ve just released an implementation of Microsoft’s IDE-independent Language Server Protocol for Elixir. It adds language support ...
1144 54250 245
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

We're in Beta

About us Mission Statement