Prześlij plik do S3 za pomocą CarrierWave bez modelu, czy to możliwe?
CarrierWave ma niesamowitą dokumentację, dopóki nie musisz tego robić bez modelu!
Skonfigurowałem ustawienia przesyłania i mgły, a wszystkie działają poprawnie, gdy używasz zainstalowanego programu do przesyłania plików na modelu, ale teraz chcę to zrobić bez modelu.
Mam to:
uploader = CsvUploader.new
something = uploader.store!(File.read(file_path))
uploader.retrieve_from_store!(self.file_name)
Kiedy dzwonię do sklepu! kod działa natychmiast, co jest dziwne, ponieważ przesłanie pliku powinno zająć kilka sekund?
Następnie po wywołaniu .retrieve_from_store! obiekt uploader ma wszystkie poprawne informacje S3, takie jak pełne adresy URL i inne.
Jednak dzwoniąc:
uploader.file.exists?
zwraca false. A przeglądanie adresów URL s3 zwraca błąd nie znaleziony przez s3.
Więc co robię źle? Powtarzam, działa po zamontowaniu, więc nie sądzę, że to moje ustawienia mgły.
Mój przesyłający:
class CsvUploader < CarrierWave::Uploader::Base
# Choose what kind of storage to use for this uploader:
storage :fog
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
include CarrierWave::MimeTypes
process :set_content_type
def store_dir
"uploads/public/extranet_csvs"
end
def cache_dir
"/tmp/uploads"
end
# Add a white list of extensions which are allowed to be uploaded.
# For images you might use something like this:
def extension_white_list
%w(csv)
end
end