2016-11-17 1 views
0

Je télécharge un fichier du côté client vers le serveur pour l'envoyer en pièce jointe dans un courrier électronique. Lorsque je sauvegarde le fichier en tant que fichier temporaire, le nom est modifié (par exemple, de leader_uniform.pdf à upload-6781801187205293221.bin). Donc, je dois aussi envoyer le nom d'origine du fichier afin que je puisse changer le nom du fichier temporaire au nom d'origine avant d'envoyer l'email. Toutefois, lorsque je sélectionne plusieurs fichiers, les noms de fichiers temporaires sont concaténés alors que seul le premier nom de fichier est renvoyé.GWT Java - Télécharger le fichier - besoin du nom de chaque fichier

Le côté client de code est:

// Load the document 
private IUploader.OnFinishUploaderHandler onFinishUploaderHandler = new IUploader.OnFinishUploaderHandler() { 
    public void onFinish(IUploader uploader) { 
     if (uploader.getStatus() == Status.SUCCESS) { 

      //The server sends useful information to the client by default 
      UploadedInfo info = uploader.getServerInfo();   

      // You can send any customised message and parse it 
      //Store path to image; 
      imagePath = info.message; //Concatenated temporary file path and name ("upload-", ".bin") returned 
      Window.alert("imagePath = " + imagePath); 

      if (info.name != null) { 
       fileName.setText(info.name); 
       lblAttached.setText("Attached"); 
       Window.alert("File name " + info.name); //Only first file name returned 
       Window.alert("File content-type " + info.ctype); 
       Window.alert("File size " + info.size); 
      } 

     } 
    } 
}; 

Le code côté serveur est:

Hashtable<String, File> receivedFiles = new Hashtable<String, File>(); 

    /** 
    * Override executeAction to save the received files in a custom place 
    * and delete this items from session. 
    */ 
    @Override 
    public String executeAction(HttpServletRequest request, List<FileItem> sessionFiles) throws UploadActionException { 
    String response = ""; 
    @SuppressWarnings("unused") 
    int cont = 0; 
    for (FileItem item : sessionFiles) { 
     if (false == item.isFormField()) { 
     cont ++; 
     try { 

      /// Create a temporary file placed in the default system temp folder 
      File file = File.createTempFile("upload-", ".bin"); 
      item.write(file); 

      /// Save a list with the received files 
      receivedFiles.put(item.getFieldName(), file); 
      receivedContentTypes.put(item.getFieldName(), item.getContentType()); 

      /// Send a customised message to the client. 
      response += file.getAbsolutePath(); 

     } catch (Exception e) { 
      throw new UploadActionException(e); 
     } 
     } 
    } 

Répondre

0

Je l'ai résolu avec ce code:

// Load the document 
private IUploader.OnFinishUploaderHandler onFinishUploaderHandler = new IUploader.OnFinishUploaderHandler() { 
    public void onFinish(IUploader uploader) { 
     if (uploader.getStatus() == Status.SUCCESS) { 

      //The server sends useful information to the client by default 
      UploadedInfo info = uploader.getServerInfo();   

      // You can send any customised message and parse it 
      //Store path to image; 
      imagePath = info.message; //Concatenated temporary file path and name ("upload-", ".bin") returned 

      String[] parts = imagePath.split(".bin"); 

      if (parts.length > 1){ 
       Window.alert("Please select one file at a time."); 
      }else{ 
       eachImagePath.add(imagePath); 
       eachImageName.add(info.name); 

       //Display a list of Attachments and allow them to be deleted. 
       displayAttachmentName(); 

       pos++; 
      } 

      if (info.name != null) { 
       fileName.setText(info.name); 
      } 
     } 
    } 
};