Fix mimetype GPX OwnCloud

De EjnTricks

Suite à des mises à jour de OwnCloud, les fichiers peuvent ne plus être reconnus par l'application. Ils sont alors téléchargés sur le poste de l'utilisateur au lieu de s'ouvrir sur le fond de carte.

Cet article présente comment manipuler les données afin de restaurer la fonctionnalité sur les fichiers existants.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Study icon.png Etude schéma

Dans la documentation du plugin, il est mentionné qu'il est possible de purger la table oc_filecache, afin de recréer les données lors de l'accès au fichier, notament la référence vers le type mime.

Attention La purge de la table peut entraîner des dysfonctionnements, comme la suppression des partages.

Mais cela donne une bonne indication sur les tables à étudier.

Table oc_mimetypes

mysql> describe oc_mimetypes;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| mimetype | varchar(255) | NO   | UNI |         |                |
+----------+--------------+------+-----+---------+----------------+

Cette table contient l'ensemble des types mime exploités sur les fichiers.


Table oc_filecache

mysql> describe oc_filecache;
+------------------+---------------+------+-----+---------+----------------+
| Field            | Type          | Null | Key | Default | Extra          |
+------------------+---------------+------+-----+---------+----------------+
| fileid           | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| storage          | int(11)       | NO   | MUL | 0       |                |
| path             | varchar(4000) | YES  |     | NULL    |                |
| path_hash        | varchar(32)   | NO   |     |         |                |
| parent           | bigint(20)    | NO   | MUL | 0       |                |
| name             | varchar(250)  | YES  |     | NULL    |                |
| mimetype         | int(11)       | NO   |     | 0       |                |
| mimepart         | int(11)       | NO   |     | 0       |                |
| size             | bigint(20)    | NO   |     | 0       |                |
| mtime            | bigint(20)    | NO   |     | 0       |                |
| storage_mtime    | bigint(20)    | NO   |     | 0       |                |
| encrypted        | int(11)       | NO   |     | 0       |                |
| unencrypted_size | bigint(20)    | NO   |     | 0       |                |
| etag             | varchar(40)   | YES  |     | NULL    |                |
| permissions      | int(11)       | YES  |     | 0       |                |
| checksum         | varchar(255)  | YES  |     | NULL    |                |
+------------------+---------------+------+-----+---------+----------------+

Dans celle-ci, la colonne mimetype contient la valeur de la colonne id de la table oc_mimetypes correspond au type mime utilisé.

Il suffit donc d'identifier les fichiers à mettre à jour, avec les colonnes path et name par exemple, et de modifier la valeur de la colonne id avec l'identifiant pour la valeur application/gpx pour la colonne mimetype dans la table oc_mimetypes.


Update icon.png Exemple mise à jour

Dans le cadre de cette installation, une mise à jour en masse a été nécessaire. L'objectif était de corriger le type mime pour tous les fichiers dont le nom se terminait par l'extension gpx.

L'étude du précédent paragraphe a permit de réaliser ceci en une seule requête.

>mysql update oc_filecache
set mimetype = (
  select id from oc_mimetypes where mimetype = 'application/gpx'
)
where name like '%.gpx';

Query OK, 2944 rows affected (0.33 sec)
Rows matched: 2945  Changed: 2944  Warning: 0

Pour cette exécution, quasiment tous les fichiers sont modifiés, à l'exception d'un dont la valeur était déjà celle souhaitée.