Published on

Create a file and all the folder structure

Authors
  • avatar
    Name
    Carlos Baraza
    Twitter
    @carlosbaraza
    Bio
    I write software and other philosophical stuff.

Today I had to deal with a small problem in Rails 2.3.18. It was how to receive on an API a XML file via JSON with the content of the file in Base64. In order to complete the task, I had to create the file, decode the content, write it in the file and move the file to another folder.

To create the file in "{{RAILSROOT}}/tmp/aaa/", first we have to create the folder structure:

file_dir = Rails.root.join(['tmp', 'aifmd', 'received_files'])
FileUtils.mkdir_p(file_dir)

mkdir_p will create all the folder structure if the folders do not exists yet.

Then, to create the file, we give it a name. In my case, just the current time in iso8601 format. We need to get rid of the colons (:), as they are not allowed as a character for a file name.

# The parameter to iso8601 give you the number of decimals. To reduce possible collisions, I gave it 2 decimals.
file_name = "#{Time.now.iso8601(2).gsub(':','')}.xml"
# Open a new file with writing rights
file_path = [file_dir, file_name].join('/')
tmp_file = File.open(file_path, 'w+')
# Write on the file the decoded content of the xml.
decoded_file_content = Base64.decode64(params[:file_content])
tmp_file.write(decoded_file_content)