Загрузка CSV-файла Coldfusion возвращает ошибку MIME-типа с MIME-типом «text/plain»

У меня проблемы с ColdFusion 10. Код работает, я не уверен, что где изменилось — сам код в этой области не менялся месяцами.

У меня есть cffile, который выглядит так:

<cffile action="upload" filefield="fileLocation" 
    destination="#destination#" 
    nameConflict="Overwrite" 
    accept="application/vnd.ms-excel,text/csv" 
    result="upload">

У меня есть файл .csv, который я загружаю. Я получаю следующую ошибку (cfcatch.message, а затем cfcatch.detail):

The MIME type or the Extension of the uploaded file text/plain was 
not accepted by the server. 

Only files of type application/vnd.ms-excel,text/csv can be uploaded. 
Verify that you are uploading a file of the appropriate type.

В Firebug часть Post записи Net для этого выглядит следующим образом:

Content-Disposition: form-data; name="fileLocation"; filename="myfilename.csv"
Content-Type: application/vnd.ms-excel

Если я уберу атрибут accept="" и затем сделаю cfdump #upload#, я получу:

CONTENTSUBTYPE  vnd.ms-excel
CONTENTTYPE     application 

Или, другими словами, CF получает приложение/vnd.ms-excel, которое отправляет Firefox. И все еще. Тип пантомимы, который он получает, - text/plain.

Я проверил файл - он в формате CSV, тот же самый, который был загружен раньше. Я переименовал файл в .txt, а затем обратно в .csv, на случай, если проблема связана с расширением. Та же ошибка. Я проверил, что у меня нет открытого файла.

Мой пользователь использует наш рабочий сервер, чтобы попробовать это. Я использую наш сервер разработки. Так что что бы это ни было, это не относится к одному серверу.

Кто-нибудь понимает, почему он работает с текстом/обычным? Я бы смутно понял это, если бы он получал application/octet-stream; text/plain просто... сбивает с толку.


person Leanne    schedule 28.10.2014    source источник
comment
Что бы это ни стоило, я столкнулся с тем же самым, когда наши серверы CF9 были обновлены до CF11. В итоге я добавил text/plain в качестве разрешенного типа MIME, а затем добавил проверку того, что расширение было csv.   -  person Fish Below the Ice    schedule 28.10.2014
comment
В любом случае вам лучше использовать более безопасные альтернативы вместо принятия. Типы Mime легко подделать См. Советы по безопасной загрузке файлов с помощью ColdFusion. +1 за хорошо сформулированный и изученный вопрос.   -  person Leigh    schedule 31.10.2014
comment
Мне это кажется новым в CF 10, Ли. Я думаю, что вместо того, чтобы полагаться на информацию о размещении POST в браузере, CF10 и 11 просматривают фактический заголовок файла для получения информации. CSV-файл может естественным образом сообщать о себе как текстовый/обычный, а?   -  person Mark A Kruger    schedule 31.10.2014
comment
Мы делаем больше проверок, чем просто мим-тип, определенно. Это удобство больше, чем что-либо еще. Я закончил тем, что просто добавил text/plain - я не хочу снимать проверку mime-типа, потому что это позволяет нам дать хорошее чистое сообщение об ошибке о формате, если оно окончательно не отправляется так, как мы этого хотим. Затем вступают в силу другие наши проверки, чтобы убедиться, что это именно те столбцы, которые мы ожидаем в нем. Спасибо за помощь, люди!   -  person Leanne    schedule 02.11.2014
comment
@Mark - я мог видеть, что он сообщает text/plain, но не application/vnd.ms-excel, как указано выше ;-) RE: CF10 и 11 просматривают фактический заголовок файла О, да. Я забыл, что началось в CF10. Линн – Марк может что-то понять. Взгляните на примеры в разделе принятые изменения. Что произойдет, если вы временно измените исходный код загрузки на использование strict="false"? Если это работает, то Марк, вероятно, прав в том, что изменение в поведении принятия является причиной того, что это не сработало.   -  person Leigh    schedule 03.11.2014
comment
Бинго, Ли, вот и все. Я прочитал это, и в нем говорилось, что значение по умолчанию для strict равно false, поэтому я не думал, что оно применимо! Показывает, что я знаю... Я думаю, что если первые байты идентифицируют его как текст, а расширение — csv, то CF должен генерировать его как текст/csv, а не текст/обычный, а что я знаю...   -  person Leanne    schedule 06.11.2014
comment
Что ж, я не думаю, что логика эта продвинута ;-) Но, если снова взглянуть на документы, кажется, что выполняемые проверки зависят от того, какие фильтры вы используете в принимаемом значении. Предположительно accept разрешает как тип mime, так и расширения файлов. Поскольку вы используете только типы mime, CF вообще не смотрит на расширение файла. Строгая настройка звучит как улучшение по сравнению со старым методом. Поэтому вы можете поиграть с настройками, чтобы увидеть, сможете ли вы найти безопасную комбинацию, которая работает в вашем сценарии.   -  person Leigh    schedule 06.11.2014


Ответы (1)


Решение:

Поместите атрибут strict="false" в тег <cffile>.

Даже если предполагается, что значение по умолчанию равно false, все равно вставьте strict, а не полагайтесь на значение по умолчанию.

Также ознакомьтесь с другими изменениями CF10 в cffile: https://wikidocs.adobe.com/wiki/display/coldfusionen/cffile

person Leanne    schedule 06.11.2014