У меня проблема с загрузкой файлов с 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 - отлично работает
Буду благодарен за любую помощь, потому что долго борюсь с этой ошибкой.