title: Download user selected file/upload a file to a user selected directory both with primefaces
body: <p>I want to download user selected files with primefaces. I was able to do so for a specific file as described in the primface showcase for "file Download". But what I actually want is, that after pressing the "download Button" a file dialog should open, so the user can select a file for himself to download. Is that possible?</p>
  
  <p>My current code for a specific file download lokks like this:</p>
  
  <pre><code>    public void handleLanguageFileDownload() throws FileNotFoundException, IOException {
  
          FacesContext fc = FacesContext.getCurrentInstance();
          ExternalContext ec = fc.getExternalContext();
  
          File fileToDownload = new File(DataManager.configreader.getLang_source());
          String fileName = fileToDownload.getName();
          String contentType = ec.getMimeType(fileName);
          int contentLength = (int) fileToDownload.length();
  
          ec.responseReset(); 
          ec.setResponseContentType(contentType); 
          ec.setResponseContentLength(contentLength); 
          ec.setResponseHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); 
  
          OutputStream output = ec.getResponseOutputStream();
  
          Files.copy(fileToDownload.toPath(), output);
  
          fc.responseComplete(); 
  }
  </code></pre>
  
  <p>I want the exact same behaviour for file upload, so the user can select the folder to upload files to for himself. My current implementation uploads the file only to a specific folder.</p>
  
  <p>My current code for uploading files to a specific folder looks like this:</p>
  
  <pre><code>    public void handleLanguageFileUpload(FileUploadEvent event) throws IOException {
  
          if (!this.role.canManageLanguage){
              return;
          }
  
          String [] filePathParts =     DataManager.configreader.getLang_source().split("/");
          String uploadPathString = DataManager.configreader.getLang_source().replaceAll(filePathParts[filePathParts.length - 1],""); //event.getFile().getFileName()
          File uploadPath = new File(uploadPathString);
          File fileToUpload = new File(uploadPath, event.getFile().getFileName());
  
          try (InputStream input = event.getFile().getInputstream()) {
              if(event.getFile().getFileName().equals(filePathParts[filePathParts.length - 1])) { //fileToUpload.getName()
              Files.copy(input, fileToUpload.toPath(), StandardCopyOption.REPLACE_EXISTING);
              uiManager.userMessage.info (event.getFile().getFileName() + " " + this.translate("msg_has_been_uploaded") + " !");
              this.getOwnTreeVersion();
              }
              else {
                  uiManager.userMessage.error (event.getFile().getFileName() + " " + this.translate("msg_is_wrong_cannot_be_uploaded") +": " + filePathParts[filePathParts.length - 1] + " !");
              }
          }
      }
  </code></pre>
  
  <p>Thank you in advance for your help!!!</p>