Anomalie #29195
ouvertErreur conversion au versement transactionnel
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
Mis à jour par Cyril VAZQUEZ il y a 7 mois
- 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.
Mis à jour par Cyril VAZQUEZ il y a 7 mois
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
Mis à jour par Cyril VAZQUEZ il y a 7 mois
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
Mis à jour par Cyril VAZQUEZ il y a 7 mois
- Statut changé de A traiter à En cours
- Tags RM 3.0.X ajouté
Mis à jour par Cyril VAZQUEZ il y a 6 mois
- 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.
Mis à jour par Jérôme BOUCHER il y a 4 mois
- Statut changé de En cours à Résolu
- Assigné à
Jérôme BOUCHERsupprimé