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 :

Comment faire une réponse http avec le nom du fichier et un status 200 ?


Sujet :

Spring Boot Java

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut Comment faire une réponse http avec le nom du fichier et un status 200 ?
    Bonjour,

    j'ai une requête sous angular qui demande d'uploader un fichier, une fois télécharger je souhaite que spring boot retourn un résultat 200 en cas de success et le nom du fichier qui aura été hashé.

    voici mon front end:
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      onSubmit() {
          const formData = new FormData();
          formData.append('file', this.fileData);
          this.http.post("http://localhost:8181/upload", formData)
            .subscribe(res => {
     
            }) 
      }

    voici spring boot
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    	@RequestMapping(value = "/upload", method = RequestMethod.POST)
     
    	public int FileUpload(@RequestParam("fichier") MultipartFile file) {
    		try {
     
    			// Get the file and save it somewhere
    			byte[] bytes = file.getBytes();
    			Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
    			Files.write(path, bytes);
    			System.out.println(this.getMd5(this.UPLOADED_FOLDER+file.getOriginalFilename())+"*****");
    			this.getHashFile();
     
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    			return 200;
     
    	}

    Pour le moment la réponse de ma requête est bien 200, mais comment je dois correctement envoyé la réponse http et le nom de mon fichier hashé?

    merci de vos réponse

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Utilise ResponseEntity, genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public ResponseEntity<String> FileUpload(@RequestParam("fichier") MultipartFile file){
    ResponseEntity<String> responseEntity = null;
    try {
     
    			// Get the file and save it somewhere
    			byte[] bytes = file.getBytes();
    			Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
    			Files.write(path, bytes);
    			System.out.println(this.getMd5(this.UPLOADED_FOLDER+file.getOriginalFilename())+"*****");
    			responseEntity = new ResponseEntity<String>(this.getHashFile(), HttpStatus.OK);
    		} catch (IOException e) {
    			e.printStackTrace();
    			responseEntity =  new ResponseEntity<String>("Erreur", HttpStatus.INTERNAL_SERVER_ERROR);
    		}
    return responseEntity;
    }
    Après, évite les print dans ton code, utilise un log.

    A+.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    merci andry ,

    voici ce que j'ai essayé:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
    @RestController
    public class TeleverserService {
     
    	private static String UPLOADED_FOLDER = "C:/Users/aker/Desktop/upload/";
    	private String fichierHash;
    	ResponseEntity<String> responseEntity = null;
     
    	@GetMapping("/hello")
    	ResponseEntity<String> hello() {
    		return new ResponseEntity<>("Hello World!", HttpStatus.OK);
    	}
     
    	@RequestMapping(value = "/upload", method = RequestMethod.POST)
     
    	public  ResponseEntity<String> FileUpload(@RequestParam("fichier") MultipartFile file) {
    		try {
     
    			// Get the file and save it somewhere
    			byte[] bytes = file.getBytes();
    			Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
    			Files.write(path, bytes);
    			this.fichierHash =this.getMd5(this.UPLOADED_FOLDER+file.getOriginalFilename());
     
    		}catch (IOException e) {
    			e.printStackTrace();
    			responseEntity =  new ResponseEntity<String>("Erreur", HttpStatus.INTERNAL_SERVER_ERROR);
    		}
    		return this.responseEntity;
     
    	}

    (quand tu me dit d'utiliser les log, c'est des console log dans le front-end ou les log coté java ?)

    je redonne mon front angular:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     onUpload(){
        console.log("onUload .....");
        console.log(this.selectedFile);
     
        const fd = new FormData();
        fd.append('fichier',this.selectedFile,this.selectedFile.name);
        console.log("resultat FD ====>");
        console.log(fd);
        this.http.post("http://localhost:8181/upload/",fd).subscribe(
          res => {
            console.log("retour http ...");
          }
        );
     
      }
    je ne reçois rien du tout:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    File*{name: "ubonheur-26-36v-500w-kit-de-velo-electrique-roue.jpg", lastModified: 1564547795499, lastModifiedDate: Wed Jul 31 2019 06:36:35 GMT+0200 (heure d’été d’Europe centrale), webkitRelativePath: "", size: 110735,*…}
    connexion.component.ts:31 resultat FD ====>
    connexion.component.ts:32 FormData*{}
    connexion.component.ts:35 retour http ...
    sinon j'ai tenté de faire un test tout simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	@GetMapping("/hello")
    	ResponseEntity<String> hello() {
    		return new ResponseEntity<>("Hello World!", HttpStatus.OK);
    	}
    avec angular:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            this.http.get("http://localhost:8181/hello").subscribe(data=>{
              console.log(data);
            });
    j'ai bien une réponse, mais le retour n'est pas accepté:

    Nom : erreur.png
Affichages : 527
Taille : 27,9 Ko

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par keokaz Voir le message
    voici ce que j'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
    @RestController
    public class TeleverserService {
     
    	private static String UPLOADED_FOLDER = "C:/Users/aker/Desktop/upload/";
    	private String fichierHash;
    	ResponseEntity<String> responseEntity = null;
     
    	@GetMapping("/hello")
    	ResponseEntity<String> hello() {
    		return new ResponseEntity<>("Hello World!", HttpStatus.OK);
    	}
     
    	@RequestMapping(value = "/upload", method = RequestMethod.POST)
     
    	public  ResponseEntity<String> FileUpload(@RequestParam("fichier") MultipartFile file) {
    		try {
     
    			// Get the file and save it somewhere
    			byte[] bytes = file.getBytes();
    			Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
    			Files.write(path, bytes);
    			this.fichierHash =this.getMd5(this.UPLOADED_FOLDER+file.getOriginalFilename());
     
    		}catch (IOException e) {
    			e.printStackTrace();
    			responseEntity =  new ResponseEntity<String>("Erreur", HttpStatus.INTERNAL_SERVER_ERROR);
    		}
    		return this.responseEntity;
     
    	}
    Mais regarde bien ce que j'ai mis dans mon code.

    Citation Envoyé par keokaz Voir le message
    (quand tu me dit d'utiliser les log, c'est des console log dans le front-end ou les log coté java ?)
    Tu vois bien que tu utilises déjà log dans ton js, et où est ce qu'il y a print dans tes codes?

    Citation Envoyé par keokaz Voir le message
    j'ai bien une réponse, mais le retour n'est pas accepté:Nom : erreur.png
Affichages : 527
Taille : 27,9 Ko
    C'est parce qu'angular s'attend que le serveur retourne un format JSON mais pas un simple String.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.http.post("http://localhost:8181/upload/",fd, {responseType: 'text'})
    A+.

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    merci de ton aide j'ai bien reçu le resultat
    j'avais oublié de mettre ce que j'envois , mais je n'ai pas eu d'erreur de json ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    @RestController
    public class TeleverserService {
     
    	private static String UPLOADED_FOLDER = "C:/Users/aker/Desktop/upload/";
    	private String fichierHash;
    	ResponseEntity<String> responseEntity = null;
     
    	@GetMapping("/hello")
    	ResponseEntity<String> hello() {
    		return new ResponseEntity<>("Hello World!", HttpStatus.OK);
    	}
     
    	@RequestMapping(value = "/upload", method = RequestMethod.POST)
     
    	public  ResponseEntity<String> FileUpload(@RequestParam("fichier") MultipartFile file) {
    		try {
     
    			// Get the file and save it somewhere
    			byte[] bytes = file.getBytes();
    			Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
    			Files.write(path, bytes);
    			this.fichierHash =this.getMd5(this.UPLOADED_FOLDER+file.getOriginalFilename());
     
    		}catch (IOException e) {
    			e.printStackTrace();
    			responseEntity =  new ResponseEntity<String>("Erreur", HttpStatus.INTERNAL_SERVER_ERROR);
    		}
    		return new ResponseEntity<>(this.fichierHash, HttpStatus.OK);
     
    	}
    pour le log tu avais rajouté cela dans mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    			e.printStackTrace();
    			responseEntity =  new ResponseEntity<String>("Erreur", HttpStatus.INTERNAL_SERVER_ERROR);
    j'ai besoin de prinln afin de savoir ou est en est le boot car sinon je m'y perd vite ...

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par keokaz Voir le message
    mais je n'ai pas eu d'erreur de json ...
    Ce n'est pas ce que dit l'image que tu as posté, d'où la correction que j'ai donné.
    Citation Envoyé par keokaz Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	private static String UPLOADED_FOLDER = "C:/Users/aker/Desktop/upload/";
    Ce genre de variable se met dans une configuration.
    Citation Envoyé par keokaz Voir le message
    pour le log tu avais rajouté cela dans mon code:
    J'ai simplement ajouté une valeur de retour en cas d'erreur.

    Citation Envoyé par keokaz Voir le message
    j'ai besoin de prinln afin de savoir ou est en est le boot car sinon je m'y perd vite ...
    Les log sont faits pour ça: https://docs.spring.io/spring-boot/d...s-logging.html

    A+.

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mais je n'ai pas eu d'erreur de json ...
    tu m'a donnée la bonne façon de le faire pour dire à angular de recevoir du texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        this.http.post("http://localhost:8181/upload/",fd,{responseType: 'text'}).subscribe(
          res => {
            console.log("response"+res+"<==="); 
          }
        );
    c'était vraiment simple, mais je n'ai pas pensé simplement cette erreur, mais je vais modifier cela en créant de la dao avec un modèle "fichier" et
    de transmettre plutôt que du texte du json pour avoir le nom du vrai fichier, sa taille et son descriptif.

    De lire dans un fichier un log il faut sans cesse aller le voir, d'ailleur j'ai pas préciser dans mon code , j'utilise commandeLInerunner pour obtenir
    les retour de la console:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @SpringBootApplication
    public class KodCms implements CommandLineRunner {
    en tout cas merci de ton aide , cela ma aidé à avancer .
    Images attachées Images attachées  

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par keokaz Voir le message
    De lire dans un fichier un log il faut sans cesse aller le voir, d'ailleur j'ai pas préciser dans mon code , j'utilise commandeLInerunner pour obtenir
    les retour de la console:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @SpringBootApplication
    public class KodCms implements CommandLineRunner {
    en tout cas merci de ton aide , cela ma aidé à avancer .
    Ça ne t’empêche pas d'utiliser un fichier log, et la sortie dans ce log peut être visualisé directement dans la console de ton IDE. Un fichier log est très utile pour faciliter de tracer les utilisations, surtout les erreurs.

    A+.

  9. #9
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Après, à ce que je vois, ton application ne se lance pas, il n'arrive pas à trouver FichierRepository pour l'injecter dans TeleverserService. Apparemment, cette interface n'a pas été scanné par spring puisque ce n'est pas annoté correctement.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/05/2006, 10h49
  2. Comment faire une requete liée avec une requete ?
    Par DavidDeTroyes dans le forum Requêtes
    Réponses: 4
    Dernier message: 18/04/2006, 13h18
  3. Comment faire une API Win32 avec C++ Builder
    Par Zerocool003 dans le forum C++Builder
    Réponses: 2
    Dernier message: 31/01/2006, 16h13
  4. [http] comment faire une requete http
    Par Slimer dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 28/07/2004, 11h48
  5. Réponses: 10
    Dernier message: 30/06/2004, 13h00

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