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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

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

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    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
    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 éprouvé

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

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    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 : 721
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
    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 : 721
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 éprouvé

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

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    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
    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+.

+ 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