プライムフェイスでユーザが選択したファイルをダウンロードしたい。私は、「ファイルのダウンロード」の原型のショーケースに記載されているように、特定のファイルに対してそうすることができました。しかし、私が実際に望むのは、「ダウンロードボタン」を押した後、ファイルダイアログを開く必要があるため、ユーザーはダウンロードするファイルを選択することができるということです。それは可能ですか?ユーザが選択したファイルをダウンロードする/プライムフェイスを持つユーザが選択したディレクトリにファイルをアップロードする
このような特定のファイルのダウンロード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] + " !");
}
}
}
はあなたの助けのために事前にありがとうございます!ファイルチューでの作業
私はそのようなことをしました(ユーザーにファイルを選択する機会を与えてください)、それはあなたが探しているものですか? –
はい、まさに私がやりたいことです!あなたが私を助けることができるなら、とても素敵でしょう!ありがとう!!! – shaolinmonkabbot
それは非常に複雑な解決策であり、stackoverflowはあなたにそれを行う方法を説明しようとする解決策を与えるためではないことを理解しています –