Является ли элемент формызависит от внешнего программного обеспечения для распознавания типов файлов для загрузки? - PullRequest
0 голосов
/ 12 марта 2011

Я столкнулся с необычным поведением в форме загрузки.Кажется, что форма не распознает файл электронной таблицы Office, если Office не установлен на компьютере клиента.Это не имеет никакого смысла для меня, но в Chrome, Firefox и IE8 моей загрузке не удается передать файл XLSX, если на клиентском компьютере не установлен Microsoft Office.

Это нормально?Есть ли способ обойти это?

Вот базовая форма, которую я использую:

    <form enctype="multipart/form-data" method="post" action="<%=request.ServerVariables("SCRIPT_NAME")%>">
        <table>
            <tr>
                <th>XLS File </th>
                <td><input type="file" name="UploadXLS" value=""  style="width:300px" /></td>
            </tr>
        </table>
        <p><button type="submit">Upload</button></p>
    </form>

edit

Вот код, который проверяет файл xls или xlsx:

if  NOT (trim(fileXLS.ContentType) = "application/vnd.ms-excel" _
    or trim(fileXLS.ContentType) = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ) _
then
    dictImportErrors.add "xlsContentType", "Spreadsheet file is not an XLS or an XLSX<br />Or, the file could be open in another location"
end if

fileXLS - это объект, пришедший из Persits.Upload dll в классическом asp.

1 Ответ

1 голос
/ 12 марта 2011

Я не знаю, как работает определение типа MIME в системах Windows, но если вы используете тип MIME, отправленный браузером, я полагаю, что такое поведение имеет смысл. Я предполагаю, что MS Office сообщит, какая часть операционной системы разрешает типы файлов в MIME-типы, что файлы с расширением .XSLX должны рассматриваться как application/ms-office-whatever. Браузеры будут иметь свою собственную таблицу типов MIME, но будут полагаться на операционную систему для неизвестных типов.

Однако полагаться на этот тип MIME в любом случае не очень хорошая идея. Это может быть ненадежно (как мы видим) и может быть подделано.

Было бы более целесообразно сделать правильную проверку на стороне сервера. Например, AFAIK, XSLX-файлы - это сжатые коллекции XML-файлов, нет? В этом случае вы можете разархивировать файл и заглянуть внутрь.

Re your edit: Кажется, это действительно зависит от типа MIME. Было бы лучше сделать обнаружение на стороне сервера. Я не знаком с ASP, хотя и не знаю, какие варианты существуют. Скорее всего, можно обнаружить файл XLSX, не распаковывая его вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...