2016-10-24 4 views
0

プライムフェイスでユーザが選択したファイルをダウンロードしたい。私は、「ファイルのダウンロード」の原型のショーケースに記載されているように、特定のファイルに対してそうすることができました。しかし、私が実際に望むのは、「ダウンロードボタン」を押した後、ファイルダイアログを開く必要があるため、ユーザーはダウンロードするファイルを選択することができるということです。それは可能ですか?ユーザが選択したファイルをダウンロードする/プライムフェイスを持つユーザが選択したディレクトリにファイルをアップロードする

このような特定のファイルのダウンロードlokksのための私の現在のコード:

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(); 
} 

私は、ファイルアップロードのためのまったく同じ動作をしたいので、ユーザは自分のためにファイルをアップロードするフォルダを選択することができます。私の現在の実装は、特定のフォルダにのみファイルをアップロードします。

特定のフォルダにファイルをアップロードするための私の現在のコードは次のようになります。

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] + " !"); 
      } 
     } 
    } 

はあなたの助けのために事前にありがとうございます!ファイルチューでの作業

+0

私はそのようなことをしました(ユーザーにファイルを選択する機会を与えてください)、それはあなたが探しているものですか? –

+0

はい、まさに私がやりたいことです!あなたが私を助けることができるなら、とても素敵でしょう!ありがとう!!! – shaolinmonkabbot

+0

それは非常に複雑な解決策であり、stackoverflowはあなたにそれを行う方法を説明しようとする解決策を与えるためではないことを理解しています –

答えて

-1

は、プロジェクトUpload File Step by Stepでそれを実装する方法を理解するために、この記事のアップロード方法の表情でのみ可能であり、あなたがFileSizeLimite、多くを追加する必要がある場合であってもPrimefacesウェブサイトPrimefaces Upload Fileで詳細を読むことができますその他の機能。

ダウンロード方法については、既定のファイルの場所(一般にダウンロード)があるので、PrimefaceのWebサイトPrimefaces Download Fileで詳細を読むことができないため、手動で設定できますが、動的ではありませんこのポスト​​を見てください。

+0

私は他のステップを正しています –

+0

これを見ましたか? –

+0

ねえ、ちょっと私はそれを見て、あなたの応答のために非常に感謝しますが、これは私が必要とするもののためにあまりにも多くです。 – shaolinmonkabbot

関連する問題