IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Boot Java Discussion :

Uploader un fichier et le copier au bon endroit


Sujet :

Spring Boot Java

  1. #1
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 066
    Points : 2 569
    Points
    2 569
    Par défaut Uploader un fichier et le copier au bon endroit
    Bonjour,

    Je souhaite ajouter à un @RestController une méthode pour uploader des fichiers, code ci-dessous, les fichiers sont bien rapatriés sur le serveur.
    Mais je 'arrive pas à les déplacer dans un dossier à la racine du projet.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        @PostMapping("uploadFile")
        public void submit(@RequestParam("file") MultipartFile file) throws IllegalStateException, IOException {
            LOGGER.info("*file uploaded :" + file.getOriginalFilename());
     
    file.transferTo(new File("./temp/" + file.getOriginalFilename()));
    Les fichiers sont bien dirigé dans un dossier temporaires grâce à la configuration dans "application.properties"
    spring.servlet.multipart.enabled=true
    spring.servlet.multipart.location=${java.io.tmpdir}
    spring.servlet.multipart.max-file-size=128KB
    spring.servlet.multipart.max-request-size=128KB
    Je pensais qu'en indiquant dans new File l'argument "./temp/", je pouvais accéder au dossier de façon relative.

    En chemin absolu ça marche

    Comment dois-je déclarer le chemin dans la fonction transferTo ?

    Si vous pouvez m'aider je vous en remercie par avance.

    Cordialement
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    De ce que je vois sur le net, il faudrait commencer par récupérer l'instance ServletContext dans la contrôleur Spring, via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @Autowired
    ServletContext context;
    Ensuite, il faut convertir ton chemin relatif en chemin absolu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String uploadPath = context.getRealPath("./Temp") + File.separator + file.getOriginalFilename();;
    De là, tu peux créer ton instance File pour ton instruction file.transferTo.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 066
    Points : 2 569
    Points
    2 569
    Par défaut
    Bonjour,

    Merci de ton aide.

    Je n'ai pas besoin du ServletContext , car je suis en Spring Boot.
    Spring boot le crée automatiquement

    A ce propose à force de travailler avec Spring boot, j'ai peur de ne plus pouvoir faire du Spring traditionnel.

    On m'a fait remarqué que je pouvait utiliser "System" pour récupérer le répertoire en cours.
    J'avais oublié cette possibilité.
    Je savais que je pouvais avoir le dossier temporaires et celui de l'utilisateur

    @PostMapping("uploadFile")
    public void download(@RequestParam("file") MultipartFile file, @RequestParam(required = false) String path) {
    try {
    LOGGER.info("*file uploaded :" + file.getOriginalFilename());

    String pwd = System.getProperty("user.dir");
    File destination = new File(pwd + "/temp/" + file.getOriginalFilename());

    file.transferTo(destination);
    LOGGER.info("File move to : " + destination);

    } catch (IOException e) {
    // TODO manually generated code block
    e.printStackTrace();
    }
    }
    Pour l'instant ça marche.

    Ensuite je vais prendre en compte le second paramètre pour classer dans des dossiers et sous-dossiers.

    Je dois mieux gérer les erreurs et surtout éviter des injections avec le paramètre 'path', avec des chemins relatifs.

    Cordialement
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 066
    Points : 2 569
    Points
    2 569
    Par défaut
    Bonjour,

    Je pense que c'est bon maintenant.
    Le mieux dans mon cas est de travailler avec les chemins relatifs.
    Car jE développe sous Windows mais déplois sous Linux.

    Par contre je me demande si je peux faire la même requête avec un fichier et une autre avec plusieurs avec le code ci-dessous.
    Est-ce que le controller fera la différence ?

    A moins que je déclare seulement le controller avec un paramètres de tableau de fichiers et que si 'il n'y a qu'un fichier il me retourne un tableau à un seul élément.
    Je n'ai pas trouvé de détails à ce sujet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @PostMapping("uploadFile") {
    public void upload(@RequestParam("files") MultipartFile[] files, ) {
    ...
     
    @PostMapping("uploadFile")
    public void upload(@RequestParam("files") MultipartFile[] files ) {
    ...
    Cordialement
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Je ne vois pas de différence entre les deux, c'est voulu ?

    Juste une petite chose qu'il faut prendre en compte, je n'utiliserais pas les chemins relatifs pour stocker les fichiers reçus, ça suppose qu'on est dans l'arborescence du serveur d'application.
    Il serait préférable de stocker en dehors du serveur, sur une unité à part. Si un jour on doit restaurer un dump de sauvegarde, on risque de perdre des fichiers.
    Personnellement, j'utiliserais une propriété de la JVM pour indiquer le répertoire de base des sauvegarde et ensuite ajouter des sous-répertoires de classement (si besoin).
    Cette méthode est compatible avec des systèmes différents (Windows / Linux).
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 066
    Points : 2 569
    Points
    2 569
    Par défaut
    Merci pour tout.

    Pour l'instant l'utilisateur poste ces fichiers au fur et à mesure et gère son arborescence .
    L'étape suivant c'est de zipper l'arborescence une fois les traitements appliqués.
    Et de permettre à l'utilisateur de télécharger le résultat.
    Je considère cet espace comme temporaire.

    Ce sera plus facile à manipuler

    J'ai testé qu'une solution pour siper, maisje ne suis pas satisfait.

    Cordialement
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Rechercher une cellule et la copier au bon endroit
    Par cecile1234 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/07/2016, 15h37
  2. Upload de fichiers avec php presque bon mais ..
    Par -Fly- dans le forum Langage
    Réponses: 5
    Dernier message: 06/11/2010, 11h32
  3. [Upload] fichier pas sauvegardé au bon endroit
    Par olivier57b dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2007, 19h08
  4. Upload de fichiers sur un ftp
    Par Crazyblinkgirl dans le forum ASP
    Réponses: 10
    Dernier message: 20/06/2004, 11h55
  5. Upload de fichiers
    Par GDVL dans le forum ASP
    Réponses: 4
    Dernier message: 03/06/2004, 12h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo