Можно ли настроить ActiveStorage на загрузку сразу после прикрепления файла, а не при нажатии кнопки отправки?

Мне нравится внешний вид нового модуля ActiveStorage для загрузки файлов в Rails 5.2, но прежде чем я перейду и переписываю тонну кода для своего сайта, похоже, что загрузка начинается только тогда, когда пользователь нажимает кнопку отправки.

Кто-нибудь знает, можно ли настроить ActiveStorage для загрузки, как только файл будет прикреплен?


person stephenmurdoch    schedule 15.12.2017    source источник
comment
да, вы можете использовать класс активного хранилища DirectUpload JS   -  person Sandeep Garg    schedule 27.04.2018


Ответы (2)


Да, это возможно с помощью "DirectUpload "класс activestorage. Это класс javascript, который используется внутри activestorage для создания объекта файла и прямой загрузки его в указанную службу.

Вы можете создать файл прямой загрузки, как только файл будет прикреплен, используя обработку события изменения файла и создание объекта класса «DirectUpload».

Вот краткий пример

import { DirectUpload } from "activestorage"

  // on file selection or change {
  const url = element.dataset.directUploadUrl
  const upload = new DirectUpload(file, url)

  upload.create((error, blob) => {
    if (error) {
      // Handle the error
    } else {
      // Add an appropriately-named hidden input to the form with a value of blob.signed_id
      $('<input>').attr({
        type: 'hidden',
        name: 'your_object[files][]',
        value: blob.signed_id
      }).appendTo('form');
    }
  })
// }

После загрузки в activestorage вы можете отправить форму, используя

$("form").submit()

который прикрепит эти загрузки к вашему объекту модели рельсов. Помните, что вы должны обновить форму, указав в ней подписанный идентификатор, иначе загрузка не будет прикреплена к вашему объекту модели.

Недавно я использовал описанный выше поток в одном из своих проектов.

person Sandeep Garg    schedule 27.04.2018
comment
Импорт также может быть import { DirectUpload } from "@rails/activestorage" - person Jack Kinsella; 09.09.2019

Я не думаю, что он встроен в Active Storage. Я не читал ни о какой такой функции в Active Storage.

По сути, идея разработки Active Storage заключается в предоставлении встроенной замены несущей волны / скрепки и прямой загрузки в облако s3 / Google Cloud.

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

person Rahul Sharma    schedule 15.12.2017