Как использовать хранилище для загрузки файла без активной записи в Rails 5?

Я программист 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.

Файл создается на сервере или загружается пользователем?

max 30.10.2018 16:26

Генерируется сервером

Alan Alves de Oliveira 31.10.2018 01:08

Затем просто используйте Сеть :: FTP из стандартной библиотеки Ruby. ActiveStorage, Paperclip и т. д. Совершенно неактуальны, поскольку они предназначены для обработки загрузки файлов из клиента.

max 31.10.2018 02:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
345
2

Ответы 2

Можно просто записать элемент params на диск:

IO.copy_stream(params[:files][0].tempfile, local_filepath)

Привет, Таллбой, спасибо за ответ, но мне нужно загрузить файл во внешнее хранилище (сервер sftp)

Alan Alves de Oliveira 30.10.2018 03:55

То, что вы просили, не является хорошим подходом. Причина проста: всякий раз, когда вы храните во внешнем хранилище, вам нужно определить различные параметры, такие как разрешение, ключи и т. д.

Приведу пример: вы сейчас храните пользовательские документы, позже вы сохраняете разные документы, изображения, относящиеся к другому объекту. Даже если вы отрицаете такую ​​актуальность, Rails полностью основан на объектно-ориентированном программировании. Таким образом, вы должны предоставить ссылку на объект для любого документа, который вы храните, чтобы вы могли правильно его извлечь.

Скрепка для бумаг - один из драгоценных камней, используемых для этого.

Чтобы сохранить его в локальном пути приложения,

 @user.document.copy_to_local_file(nil, path)

Здесь в приведенном выше документе может быть поле, отличное от db, для пользователя, созданного attr_accessor. copy_to_local_file - это метод скрепки.

Привет, Рэй, спасибо за ответ. Извините, я не очень хорошо объяснил это. Файлы, которые я хочу загрузить, не имеют отношения к объекту. Это CSV-файл с консолидированными данными о текущих операциях.

Alan Alves de Oliveira 30.10.2018 06:51

@AlanAlvesdeOliveira Вопрос в том, что вы будете сохранять на внешнем хранилище, но как вы их отсылаете или идентифицируете?

ray 30.10.2018 07:56

Я сохраню файлы как <current_time_stamp> .csv, после сохранения больше не нужно будет ссылаться на них

Alan Alves de Oliveira 30.10.2018 08:24

Другие вопросы по теме