inode / x-empty content-type после загрузки файла из iOS и GoogleDrive / iCloud - PullRequest
1 голос
/ 14 февраля 2020

У меня проблема с загрузкой файлов с iOS устройств и облачных хранилищ, таких как Google Drive или iCloud, в мое приложение Ruby on Rails. Когда файл загружается из локального хранилища или android и настольных приложений, все работает следующим образом.

Технические характеристики приложения:

  • RoR 4.2.7.1 (он также был протестирован после обновления до RoR 5.0)
  • Ruby 2.3.3
  • Скрепка v6.1.0 (для вложений)

После сохранения формы у меня есть скрепка Исключение подделки:

[paperclip] Content Type Spoof: Filename 001.testing_doc.gdoc (inode/x-empty from Headers, [] from Extension), content type discovered from file command: inode/x-empty. See documentation to allow this combination.

Конечно, загруженный файл не пустой.

Я решил отладить проблему до того, как запустится всякая скрепка, поэтому проверяю действие params внутри контроллера перед сохранением объекта с помощью скрепки:

#<ActionDispatch::Http::UploadedFile:0x007f90c2422868 @tempfile=#<Tempfile:/var/folders/4w/tskhtmr14g5b4822nsdckgfm0000gn/T/RackMultipart20200214-67820-4542m9.gdoc>, @original_filename="001. Console - podstawy.gdoc", @content_type="application/vnd.google-apps.document", @headers="Content-Disposition: form-data; name=\"user[cvs_attributes][0][file]\"; filename=\"001.testing_doc.gdoc\"\r\nContent-Type: application/vnd.google-apps.document\r\n">

Я проверил файл в папке tmp /var/folders/4w/tskhtmr14g5b4822nsdckgfm0000gn/T/RackMultipart20200214-67820-4542m9.gdoc с помощью программы cat, и файл был пуст. Не должно быть.

Еще одна проблема состоит в том, что проблема существует в наших 3 различных случаях применения. FE одного из них написан с помощью Angular, а остальные - просто интегрированные представления с приложением RoR и библиотекой jQuery.

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

  • RoR 5.0, paperclip v6.0.1 - у меня было исключение Content Type Spoof paperclip, но файл внутри params не был пустым. Исключение было связано с другой вещью. Тип содержимого был правильно.
  • RoR 5.2, скрепка v6.0.1 - то же, что и выше, файл не был пустым.
  • RoR 5.2, ActiveStorage - отлично работает
  • RoR 6.0 , ActiveStorage - отлично работает

Буду благодарен за любую помощь, потому что долго борюсь с этой ошибкой.

...