You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2024-08-14 12:05:14

qretornaz
Member
Registered: 2024-07-29
Posts: 4

Envoi de document via l'API: fichier vide

Bonjour à tous,

J'essaye d'envoyer des documents via l'API REST sur GLPI mais quand j'ouvre les fichiers dans l'interface web de GLPI, le fichier est vide.

Du moins, ça me le fait surtout sur des fichiers image (même de petite taille de quelque kilo octets).
J'ai testé d'envoyer un fichier texte de 1ko et il est bien complet.

J'ai une erreur qui revient dans php-errors.log (j'ai enlevé l'encodage du fichier en base64 très long) :

[2024-08-14 09:52:31] glpiphplog.WARNING:   *** PHP User Warning (512): Moving file `
[...]
` is forbidden for security reasons. in /var/www/glpi/src/Document.php at line 1181
  Backtrace :
  src/Document.php:1181                              trigger_error()
  src/Document.php:274                               Document->moveUploadedDocument()
  src/CommonDBTM.php:1297                            Document->prepareInputForAdd()
  src/Api/API.php:1856                               CommonDBTM->add()
  src/Api/APIRest.php:317                            Glpi\Api\API->createItems()
  apirest.php:57                                     Glpi\Api\APIRest->call()
  public/index.php:82                                require()

J'ai ce message avec plusieurs image jpg de quelques dizaines de kilo octets.

Voici le code Powershell que j'utilise pour faire les requêtes.

La variable $url contient l'adresse du serveur GLPI, les variables $app_token et $user_token les tokens correspondants.

$session_token = (Invoke-RestMethod -Uri "$url/apirest.php/initSession?get_full_session=true" -Method POST -Headers @{"Content-Type" = "application/json"; "Authorization" = "user_token $user_token"; "App-Token" = "$app_token"}).session_token

$contenuFichier = [System.IO.File]::ReadAllBytes("C:\image.jpg")

$pieceJointe = @{
    input = @{
        name = "image.jpg"
        filename = "image.jpg"
        mime = "image/jpeg"
        upload_file = ([Convert]::ToBase64String($contenuFichier))
    }
} | ConvertTo-Json

([Convert]::ToBase64String($contenuFichier))

$reponse_fichier = Invoke-RestMethod -Uri "$url/apirest.php/Document" -Method POST -Headers @{ "Content-Type" = "application/json"; "App-Token" = $app_token; "Session-Token" = $session_token } -Body $pieceJointe

J'ai vérifié les droits dans /var/www/glpi/files et normalement tous les droits sont bons.

Pouvez-vous m'aider à trouver ce qui bloque l'envoi des documents ?

Merci d'avance

Offline

#2 2024-08-15 02:17:44

cconard96
Moderator
Registered: 2018-07-31
Posts: 2,806
Website

Re: Envoi de document via l'API: fichier vide

Cette erreur ne devrait se produire que si le nom de fichier fourni contient les séparateurs de chemin d'accès "/" ou "\". Quelle version de GLPI utilisez-vous ?


GLPI Collaborator and Plugin Developer.
My non-English comments are automated translations. Sorry for any confusion that causes.
Mes commentaires non anglais sont des traductions automatiques. Désolé pour toute confusion qui cause.
Mis comentarios que no están en inglés son traducciones automáticas. Perdón por cualquier confusión que cause.

Offline

#3 2024-08-19 09:38:34

qretornaz
Member
Registered: 2024-07-29
Posts: 4

Re: Envoi de document via l'API: fichier vide

Bonjour,

Je suis sur la version 10.0.16

Offline

#4 2024-08-19 10:04:13

qretornaz
Member
Registered: 2024-07-29
Posts: 4

Re: Envoi de document via l'API: fichier vide

Bonjour,

Je viens d'essayer quelque chose suite à votre remarque sur les séparateurs de chemin d'accès.

Dans mon cas, seul le type mime contient un séparateur. Lorsque je l'enlève, le navigateur demande à le télécharger et le fichier téléchargé correspond bien au fichier envoyé.

Ce qui me surprend aussi, c'est que le problème ne se manifeste pas lorsque j'utilise le type mime "text/plain".

Erratum, le fichier est vide (0ko). Aussi je pensais que le fichier texte fonctionnait mais en réalité, il est vide aussi.

Cela se produit donc tout le temps.

Last edited by qretornaz (2024-08-19 10:07:23)

Offline

Board footer

Powered by FluxBB