Anomalie #29195
ouvert
Erreur conversion au versement transactionnel
Ajouté par Cyril VAZQUEZ il y a 6 mois.
Mis à jour il y a 3 mois.
Description
La conversion ne fonctionne pas lors d'un versement depuis Pastell avec l'API Maarch : le pdf/a apparaît bien dans les documents, mais s'affichent des pages blanches.
Tests menés :
- nouveau versement dans MaarchRM de documents de la même source -> conversion ok, pdf/a lisible
- nouveau versement depuis Pastell -> pdf page blanche
La conversion pose donc problème avec l'API Maarch depuis Pastell.
Fichiers
- Sujet changé de Erreur conversion pdf/ sur versement depuis Pastell à Erreur conversion au versement transactionnel
Analyse :
La méthode digitalResource::convert
reçoit l'objet digitalResource
à convertir.
Elle copie le flux (stream/handler) vers un répertoire temporaire pour réaliser la conversion.
Il y a un test pour utiliser le nom de fichier s'il existe.
$tempdir = str_replace("/", DIRECTORY_SEPARATOR, \laabs\tempdir());
if (isset($digitalResource->fileName)) {
$srcfile = $tempdir . DIRECTORY_SEPARATOR . $digitalResource->fileName;
} else {
$srcfile = $tempdir . DIRECTORY_SEPARATOR . $digitalResource->resId;
}
$tgtfp = fopen($srcfile, 'w');
stream_copy_to_stream($handler, $tgtfp);
Le problème vient du fait que si le bordereau SEDA ou autre message formel utilise des noms de fichier comportant des chemins répertoire, ce nom est repris tel-quel dans l'attribut filename
.
2 options :
- Modifier le traitement SEDA/Medona pour ne conserver que le nom de fichier et pas le chemin répertoire au moment d'attribuer la valeur digitalResource::$filename`
- Modifier la procédure de conversion pour ne conserver que le nom de fichier et pas le chemin répertoire au moment de créer le fichier temporaire
Les deux peuvent être réalisées.
- Description mis à jour (diff)
Le traitement SEDA 2 qui génère l'objet DigitalResource
prend bien uniquement en compte la valeur de FileInfo/Filename
:
if (isset($binaryDataObject->fileInfo->filename)) {
$resource->fileName = $binaryDataObject->fileInfo->filename;
$resource->fileExtension = pathinfo($resource->fileName, \PATHINFO_EXTENSION);
}
Il est probable que les données produites par Pastell soient invalides car elles contiennent un filename avec séparateur.
Contournement = ne conserver que le nom de fichier et pas le chemin avec la fonction pathinfo($binaryDataObject->fileInfo->filename, \PATHINFO_BASENAME);
attention ne pas utiliser PATHINFO_FILENAME qui ne conserve pas l'extension
Branche maarchRM fix/29195_filename_containing_directory_separators
créée depuis Support/2.9.X
Modification de la méthode de conversion pour utiliser basename sur digitalResource::$filename pour le nom de fichier temporaire
Branche AP fix/29195_filename_containing_directory_separators
créée depuis Support/2.9.X
Modification des procédures SEDA et SEDA2 pour utiliser basename sur Attachement::$filename et FileInfo::$filename pour alimenter digitalResource::$filename
A tester
A reporter sur develop pour V3
- Statut changé de A traiter à En cours
- Tags RM 3.0.X ajouté
- Assigné à changé de Cyril VAZQUEZ à Jérôme BOUCHER
Peux-tu planifier la validation du correctif sur les branches à fusionner 2.9.X et ensuite reporter les corrections sur develop pour la V3 ?
Il faut mettre un Filename avec '/' dans les bordereaux SEDA avec conversion au dépôt. Je peux essayer de tester demain.
- Statut changé de En cours à Résolu
- Assigné à
Jérôme BOUCHER supprimé
Formats disponibles : Atom
PDF