Pourquoi suis-je mime-type de .fichier csv comme “application/octet-stream”?
Je suis en train de travailler sur une application PHP qui doit importer un fichier excel dans MySQL. J'ai donc besoin de convertir le fichier excel .le format csv. Mais quand je veux obtenir son type à l'aide de $_FILE['something']['type']
, je reçois application/octet-stream
que son type mime;
Je pense qu'il ya quelque chose de mal ici. Parce que j'ai recueilli la liste ci-dessous .csv fichier de type mime:
text/comma-separated-values,
text/csv,
application/csv,
application/excel,
application/vnd.ms-excel,
application/vnd.msexcel
Quelle est la question ?
- Aussi, parfois, quand vous avez votre fichier ouvert avec MS excel, tandis que l'on accède à partir de votre application, vous obtenez "application/octet-stream" mime type. Qui s'imposait à moi avec une application Java, il y a quelques temps.
- notez que si la taille de votre fichier passe le
upload_max_filesize
réglage en php.ini, vous obtiendrezapplication/octet-stream
au lieu d'attendre mime
Vous devez vous connecter pour publier un commentaire.
Dans des moments comme ceux-ci, l'officiel de la spécification HTTP, est toujours utile. De La RFC 2616 7.2.1 (italiques ajoutés):
La cause de votre problème, c'est que le serveur qui accepte le téléchargement du fichier n'est pas lui-même de savoir quel type de fichier a été téléchargé. Pourquoi? Parce qu'il s'appuie sur le message HTTP, qui a envoyé le fichier pour spécifier un
Content-Type
- tête pour déterminer exactement le type mime. Le navigateur a probablement pas envoyé unContent-Type
en-tête et le serveur a assuméapplication/octet-stream
que par l'officiel de la spécification HTTP extrait ci-dessus. Il est également possible que le client le téléchargement du fichier choisi de ne pas déterminer le type mime du fichier, c'est le téléchargement et l'envoyé de laContent-Type: application/octet-stream
en-tête lui-même.Maintenant, quand nous considérons ce projet en collaboration avec le Manuel PHP entrée concernant le POST de téléchargement de fichiersdocs, nous voyons ce qui suit:
Donc, comme vous pouvez le voir, même si
$_FILES['userfile']['type']
est spécifié, il ne correspond qu'à laContent-Type
en-tête envoyé par le client. Cette information peut être facilement truquées et ne doit pas être invoqué. Si vous avez besoin d'être sûr que le fichier téléchargé est d'un type spécifique, vous devrez vérifier que vous-même.application/octet-stream
est toujours utilisé si le type mime n'est pas connue.Tous les mime-types de la liste d'apparaître comme le commun des types mime pour les fichiers csv sur http://filext.com/file-extension/CSV
Donc, fondamentalement, je dirais qu'il descend pour le programme qui a généré l' .fichier csv et qui mime-type, ils ont décidé de l'utiliser.
$_FILE['something']['type']
est rempli par le navigateur /système d'exploitation, de sorte qu'il n'est pas fiable. Vous devriez faire votre propre case à côté serveur afin de déterminer si le fichier téléchargé est au format désiré.