Загрузите сгенерированные файлы Apache POI XLSX на сайт CodeIgniter - PullRequest
0 голосов
/ 21 марта 2019

Мне нужно загрузить файлы XLSX в веб-приложение. Это веб-приложение использует CodeIgniter для проверки и импорта этих файлов.

Кроме того, я должен сгенерировать эти файлы XLSX из другого. Для чтения и записи файлов XLSX я использую Apache Poi. Эта часть довольно проста и хорошо работает.

Но вот моя проблема: при загрузке автоматически сгенерированного файла CodeIgniter отклоняет файлы, говоря, что этот тип файла не разрешен. Вероятно, это отсутствующее свойство, которое не создано библиотекой Apache POI, но мне не удалось найти какое.

Еще один забавный факт заключается в том, что при открытии автоматически сгенерированного файла Apache Poi в Microsoft Excel и последующем сохранении его без каких-либо изменений он получает данные размером около 3Ко и становится действительным для CodeIgniter. Он не работает с LibreOffice Calc, который добавляет некоторые данные, но не так, как Microsoft Excel.

У вас есть представление о том, какое свойство или данные могут отсутствовать? Любой способ решить мою проблему?


Редактировать: после еще нескольких исследований и в соответствии с функцией php finfo_file (используемой CodeIgniter) мой плохой файл имеет следующий тип mime application/octet-stream, тогда как у легального файла следующий тип mime application/vnd.openxmlformats-officedocument.spreadsheetml.sheet. Затем я думаю, что у Apache Poi есть какая-то ошибка при генерации XLSX.


Редактировать 2: Наконец, есть 2 типа XLSX (см. Прилагаемый скриншот). Только второй признается application/vnd.openxmlformats-officedocument.spreadsheetml.sheet finfo_file. К сожалению, Apache Poi генерирует подпись первого типа. Таким образом, он не распознается как XLSX. enter image description here

1 Ответ

0 голосов
/ 21 марта 2019

Это странное поведение в конечном итоге происходит из-за неоднозначности формата файла XLSX. Он охватывает два разных формата файлов (как вы можете видеть на прилагаемом рисунке из https://www.filesignatures.net/).. Только второй распознается как application/vnd.openxmlformats-officedocument.spreadsheetml.sheet по finfo_file, тогда как Apache Poi генерирует файлы первого типа. Таким образом, загрузка не удалась, сообщив, что тип файла запрещен.

enter image description here

...