Загрузить выбранный пользователем файл / загрузить файл в выбранный пользователем каталог, оба с простыми лицами

Я хочу скачать выбранные пользователем файлы с простыми лицами. Я смог сделать это для определенного файла, как описано в демонстрации primface для "Загрузка файла". Но на самом деле я хочу, чтобы после нажатия "кнопки загрузки" открывалось диалоговое окно файла, чтобы пользователь мог выбрать файл для загрузки. Это возможно?

Мой текущий код для загрузки конкретного файла выглядит так:

    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 ответ

Решение

Работа с выбором файлов возможна только при использовании метода Upload. Изучите этот пост, чтобы понять, как реализовать его в своем проекте. Upload File Step by Step, и вы даже можете прочитать больше на веб-сайте Primefaces. Загрузить файл Primefaces, если вам нужно добавить FileSizeLimite и много других возможностей.

Теперь для метода загрузки я сказал вам, что это невозможно, потому что у вас есть местоположение файла по умолчанию (обычно это Скачать), вы можете прочитать больше об этом на веб-сайте Primefaces. Скачать файл Primefaces, вы можете установить его вручную, но он не будет динамически смотреть на этот пост Изменить путь загрузки.

Другие вопросы по тегам