|
|
|
require "fileutils"
|
|
|
|
|
|
|
|
module Storage
|
|
|
|
class LocalDiskService < StorageService
|
|
|
|
def list_files(folder = "/")
|
|
|
|
path = Rails.root.join("tmp/storage", folder)
|
|
|
|
Dir.entries(path)
|
|
|
|
end
|
|
|
|
|
|
|
|
def get_file(filename)
|
|
|
|
path = Rails.root.join("tmp/storage", filename)
|
|
|
|
|
|
|
|
File.open(path, "r").read
|
|
|
|
end
|
|
|
|
|
|
|
|
def get_file_io(filename)
|
|
|
|
path = Rails.root.join("tmp/storage", filename)
|
|
|
|
|
|
|
|
File.open(path, "r")
|
|
|
|
end
|
|
|
|
|
|
|
|
# rubocop:disable Lint/UnusedMethodArgument
|
|
|
|
def write_file(filename, data, content_type: nil)
|
|
|
|
# rubocop:enable Lint/UnusedMethodArgument
|
|
|
|
path = Rails.root.join("tmp/storage", filename)
|
|
|
|
|
|
|
|
FileUtils.mkdir_p(path.dirname)
|
|
|
|
|
|
|
|
File.open(path, "w") do |f|
|
|
|
|
f.write data
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def get_file_metadata(filename)
|
|
|
|
path = Rails.root.join("tmp/storage", filename)
|
|
|
|
|
|
|
|
{
|
|
|
|
"content_length" => File.size(path),
|
|
|
|
"content_type" => MiniMime.lookup_by_filename(path.to_s)&.content_type || "application/octet-stream",
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
def file_exists?(filename)
|
|
|
|
path = Rails.root.join("tmp/storage", filename)
|
|
|
|
|
|
|
|
File.exist?(path)
|
|
|
|
end
|
|
|
|
|
|
|
|
def delete_file(filename)
|
|
|
|
path = Rails.root.join("tmp/storage", filename)
|
|
|
|
|
|
|
|
File.delete(path)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|