Как мне загрузить фотографию для создания PDF-файла без сохранения фотографии

#ruby-on-rails

#ruby-on-rails

Вопрос:

Может ли ActiveStorage сохранить файл в сеансе / браузере, чтобы сразу использовать его для рендеринга PDF, а затем забыть?

В настоящее время пользователь заполняет форму, добавляет фотографию, и мы сохраняем фотографию в облаке только для одноразового использования, а затем удаляем облачную фотографию.

Ответ №1:

На самом деле вам не нужен ActiveStorage только для того, чтобы принимать загрузки файлов через форму:

 <%= form_with(url: {action: :upload}, multipart: true) do %>
  <%= file_field_tag 'picture' %>
<% end %>
 
<%= form_with model: @person do |f| %>
  <%= f.file_field :picture %>
<% end %>
  

При отправке формы в параметрах будет указан экземпляр ActionDispatch::Http::UploadedFile:

 params[:picture]
params[:person][:picture]
  

На самом деле это просто оболочка fancypants вокруг экземпляра Tempfile, и, таким образом, она сама отключится, когда rails выполнит запрос.

Загрузка в белый список действительно проста, поскольку ActionDispatch::Http::UploadedFile является одним из разрешенных скалярных типов:

 params.require(:person).permit(:picture)
  

Весь смысл ActiveStorage на самом деле не в загрузках — он предоставляет множество бэкэндов, чтобы вы могли прикреплять загруженные файлы к моделям и сохранять их с минимальными усилиями. Если вы не сохраняете загруженные файлы, это действительно просто раздувание.