Я программист PHP и недавно начал работать с ROR. В PHP + Laravel есть довольно удобная реализация для загрузки файлов, что-то вроде
Storage::disk('my_sftp_server')->put('hello.txt', 'Hello World');
https://laravel.com/docs/5.7/filesystem
Где my_sftp_server был установлен в Laravel-версии файла storage.yml.
Поскольку Laravel сильно основан на Rails, я думаю, что должен быть аналогичный способ сделать это с Rails. Но когда я ищу Хранение рельсов в Google, все результаты связаны с ActiveStorage, и в моем случае мои файлы не имеют прямого отношения к моим активным записям.
Есть ли способ использовать уже установленное хранилище Rails для загрузки файла?
Я разрабатываю систему доставки, и в конце дня мне нужно создать консолидированный отчет и сохранить его на сервере оператора связи с помощью SFTP.
Генерируется сервером
Затем просто используйте Сеть :: FTP из стандартной библиотеки Ruby. ActiveStorage, Paperclip и т. д. Совершенно неактуальны, поскольку они предназначены для обработки загрузки файлов из клиента.
Можно просто записать элемент params
на диск:
IO.copy_stream(params[:files][0].tempfile, local_filepath)
Привет, Таллбой, спасибо за ответ, но мне нужно загрузить файл во внешнее хранилище (сервер sftp)
То, что вы просили, не является хорошим подходом. Причина проста: всякий раз, когда вы храните во внешнем хранилище, вам нужно определить различные параметры, такие как разрешение, ключи и т. д.
Приведу пример: вы сейчас храните пользовательские документы, позже вы сохраняете разные документы, изображения, относящиеся к другому объекту. Даже если вы отрицаете такую актуальность, Rails полностью основан на объектно-ориентированном программировании. Таким образом, вы должны предоставить ссылку на объект для любого документа, который вы храните, чтобы вы могли правильно его извлечь.
Скрепка для бумаг - один из драгоценных камней, используемых для этого.
Чтобы сохранить его в локальном пути приложения,
@user.document.copy_to_local_file(nil, path)
Здесь в приведенном выше документе может быть поле, отличное от db, для пользователя, созданного attr_accessor
. copy_to_local_file
- это метод скрепки.
Привет, Рэй, спасибо за ответ. Извините, я не очень хорошо объяснил это. Файлы, которые я хочу загрузить, не имеют отношения к объекту. Это CSV-файл с консолидированными данными о текущих операциях.
@AlanAlvesdeOliveira Вопрос в том, что вы будете сохранять на внешнем хранилище, но как вы их отсылаете или идентифицируете?
Я сохраню файлы как <current_time_stamp> .csv, после сохранения больше не нужно будет ссылаться на них
Файл создается на сервере или загружается пользователем?