plugin files filedownload example descargar con aspx php csv http-headers mime-types file-format

php - files - jquery filedownload pdf



¿Por qué recibo el tipo mime del archivo.csv como "application/octet-stream"? (4)

Estoy trabajando en una aplicación PHP que debe importar un archivo Excel en MySQL. Entonces necesito convertir el archivo de Excel a formato .csv. Pero cuando quiero obtener su tipo usando $_FILE[''something''][''type''] , obtengo application/octet-stream como su tipo mime;
Creo que hay algo mal aquí. Porque reuní la siguiente lista como un archivo .csv tipo mime:

text/comma-separated-values, text/csv, application/csv, application/excel, application/vnd.ms-excel, application/vnd.msexcel

Qué pasa ?


En momentos como estos, la especificación HTTP oficial siempre es útil. De RFC 2616 7.2.1 (mi énfasis agregado):

Cualquier mensaje HTTP / 1.1 que contenga un cuerpo de entidad DEBERÍA incluir un campo de encabezado de tipo de contenido que defina el tipo de medio de ese cuerpo. Si, y solo si, el tipo de medio no está dado por un campo de Tipo de contenido, el destinatario PUEDE intentar adivinar el tipo de medio a través de la inspección de su contenido y / o la (s) extensión (es) de nombre del URI utilizado para identificar el recurso. Si el tipo de medio permanece desconocido, el destinatario DEBE tratarlo como tipo "application / octet-stream" .

La causa de su problema es que el servidor que acepta la carga del archivo no sabe por sí mismo qué tipo de archivo se ha cargado. ¿Por qué? Porque depende del mensaje HTTP que envió el archivo para especificar un encabezado Content-Type para determinar el tipo exacto de mime. Es probable que el navegador no haya enviado un encabezado Content-Type y el servidor haya asumido application/octet-stream según el extracto de la especificación HTTP oficial anterior. También es posible que el cliente que carga el archivo haya optado por no determinar el tipo de mime del archivo que estaba cargando y haya enviado el Content-Type: application/octet-stream .

Ahora, cuando consideramos esto junto con la entrada manual de PHP con respecto a los documentos de carga de archivos POST , vemos lo siguiente:

$_FILES[''userfile''][''type'']

El tipo de mimo del archivo, si el navegador proporcionó esta información. Un ejemplo sería "image / gif". Sin embargo, este tipo de mimo no está verificado en el lado de PHP y, por lo tanto, no da su valor por sentado.

Como puede ver, incluso si se $_FILES[''userfile''][''type''] , solo corresponde al encabezado Content-Type enviado por el cliente. Esta información puede ser fácilmente falsificada y no se debe confiar en ella. Si necesita estar seguro de que el archivo cargado es de un tipo específico, deberá verificarlo usted mismo.


Todos los mime-types que enumeró aparecen como mime-types comunes para archivos csv en http://filext.com/file-extension/CSV

Así que básicamente diría que se trata de qué programa generó el archivo .csv y qué tipo de mime decidieron usar.


$_FILE[''something''][''type''] está poblado por el navegador / sistema operativo del usuario, por lo que no es confiable. Debe hacer su propio control en el servidor para determinar si el archivo cargado está en el formato deseado.


application/octet-stream siempre se utiliza si no se conoce el tipo de mime.