Открыть файл в модальном диалоге

#java #file #modal-dialog #response

#java #файл #модальный диалог #ответ

Вопрос:

У меня есть этот код для открытия любого файла по пути. Но в этом случае файл открывается на новой вкладке.

Мне нужен этот ответ, чтобы открыть этот файл в модальном загрузчике или диалоге.

 File file = new File(path);
String name = file.getName();
int fileSize = (int) file.length();
response.setContentType(contentType);
response.setContentLength(sizeFile);
response.setHeader("Content-Disposition", "inline; filename=""   name   """);
output = response.getOutputStream();
Files.copy(file.toPath(), output);
  

У кого-нибудь есть подсказка или другой способ сделать?

Комментарии:

1. Итак, по сути, вы хотите «просмотреть» файл в модальном окне вашего браузера, как, например, Google Drive? Что это за файл?

2. ДА. Может быть, например, PDF, docx, xlsx.

3. Ну, я полагаю, что направление ответа на iframe внутри модального диалога может быть решением.

Ответ №1:

Я нашел решение.

Использование bootstrap 3.3.5

В HTML кнопка вызывает функцию javascript ‘view’, передавая в качестве параметров путь к сервлету (MSD) и расширение файла:

 <button class="btn-doc-sm btn-default" type="button" 
    onclick="view('<% out.print(MSD?p=c:/upload/documents/document.docxamp;action=view)); %>', '<% out.print(ext); %>')" id="view">
   <span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span>View
</button>
  

Функция .js устанавливает значение пути для модального, идентифицируемого pathDoc, и открывает модальный режим «просмотр».

 function view(path, ext) {
        var booleanValue;
        if (path !== null) {
            $("#pathDoc").attr("src", path);
            $("#view").modal('show');
            booleanValue = true;
        }
        if (booleanValue !== true) {
            $("#error").modal('show');
        }
    }
  

Модальный:

     <div class="modal fade" id="view" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                    <!-- Header -->
                    <div id="confirmacao-label1">
                        <a href="#close" title="Close" data-dismiss="modal" class="closeModal">X</a>
                    </div>
                        <!-- End header -->
                    <div class="modal-body">
                        <div class="embed-responsive embed-responsive-4by3" id="modal-embed">
                            <iframe class="embed-responsive-item" id="pathDoc" nome="pathDoc" src=""></iframe>
                        </div>
                    </div>
            </div>
        </div>
    </div>
  

«Переменный путь» — это ссылка для вызова сервлета, передающего «реальный путь» и действие в качестве параметра. Сервлет откроет вывод с файлом.

 switch(action){
            case "view":
                try {
                    File file = new File(filePath);
                    String name = file.getName();
                    int fileSize = (int) file.length();
                    response.setContentType(action);
                    response.setContentLength(fileSize);
                    response.setHeader("Content-Disposition", "inline; filename=""   name   """);
                    output = response.getOutputStream();
                    Files.copy(file.toPath(), output);
                    break;
                } catch (Exception ex ) {
                    System.out.println(ex.getMessage());
                } finally {
                    output.close();
                }
                break;
  

Итак, когда вызывается модальный, в src устанавливается ссылка на сервлет для открытия файла. Сервлет выполняет поиск и открывает файл при выводе.