下载用户选择的文件/使用primefaces将文件上传到用户选择的目录

时间:2016-10-24 06:36:37

标签: jsf primefaces jsf-2 download upload

我想用Primefaces下载用户选择的文件。我能够为“文件下载”的原始展示中描述的特定文件执行此操作。但我真正想要的是,在按下“下载按钮”后,应该打开一个文件对话框,这样用户就可以选择一个供自己下载的文件。这可能吗?

我目前的特定文件下载代码如下:

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

提前感谢您的帮助!!!

1 个答案:

答案 0 :(得分:-1)

使用文件选择器只能使用上传方法查看此帖子,以了解如何在项目Upload File Step by Step中实现它,如果您在Primefaces网站Primefaces Upload File中甚至可以阅读更多内容需要添加FileSizeLimite和许多其他功能。

现在对于下载方法,我告诉您,由于您有默认文件位置(通常是下载),因此您可以在Primefaces网站Primefaces Download File中阅读更多相关信息。你可以手动设置它,但不会动态看这篇文章Change Download Path