You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.2 KiB
55 lines
1.2 KiB
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
|
|
|