Вопрос

Я реализовал RPCService, RPCSERVICEASYNC & RPCSERVIIMPL. При нажатии на кнопку будет вызываться услуга на стороне сервера, и она будет создана данные из БД и файла. Как только файл создан, то мне нужно открыть этот файл на стороне клиента и нужно подсказать диалоговое окно с параметрами Open / Save. Как я могу реализовать это открытие файла. Просьба предложить способ реализации t .. Ответить пожалуйста. Спасибо заранее ....

@Hambend: У меня все еще есть еще одно уточнение! OnClicking Эта кнопка Service RPCSERVICEIMPL называется, и все манипуляции выполняются, и файл создается в функции Serperate (Public int GenerateFile (имя строки) ()). Как сделать эту функцию называть методом Doget? Поскольку oget требуется запрос, параметры ответа, которые будут переданы вместе с этим ?? Пожалуйста, предложите мне метод, чтобы вызвать этот метод. заранее спасибо

Это было полезно?

Решение

Услуги RPC GWT могут вернуть только объекты Java к клиенту. Чтобы отправить файл обратно пользователю, вам нужно использовать не-GWT Java Servlet. Вот какой-то код, который я использовал ранее для обслуживания изображений JPEG из репозитория.

public class ImageServlet extends HttpServlet {
    private final String repository = "/var/images/";

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        String filename = request.getParameter("file");

        // Security: '..' in the filename will let sneaky users access files
        // not in your repository.
        filename = filename.replace("..", "");

        File file = new File(repository + filename);
        if (!file.exists())
            throw new FileNotFoundException(file.getAbsolutePath());

        response.setHeader("Content-Type", "image/jpeg");
        response.setHeader("Content-Length", String.valueOf(file.length()));
        response.setHeader("Content-disposition", "attachment;filename=\"" + filename + "\"");

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
        BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
        byte[] buf = new byte[1024];
        while (true) {
            int length = bis.read(buf);
            if (length == -1)
                break;

            bos.write(buf, 0, length);
        }
        bos.flush();
        bos.close();
        bis.close();
    }
}

«Устройство контента: Attachment» должно вызывать большинство браузеров для загрузки файла вместо того, чтобы отображать его с использованием файла по умолчанию к тому, что вы предоставляете. То, как вы будете использовать этот сервлет, это необходимо позвонить в RPCService, который у вас уже есть, что сохраняет файл в папку «Репозиторию». Затем вы ссылаетесь или перенаправляете их на этот сервлет с URL, таким как http://your.domain.com/filesevlet?file=myfile.jpg.. Отказ Очевидно, что с этой установкой у вас есть риск безопасности, где пользователи могут скачать файлы других людей, если они могут угадать имена файлов.

То, что вы хотели бы сделать, это объединить код базы данных из вашей службы RPC в этот сервлет. Там нет необходимости сохранять файл в любом месте на сервере, вы можете принять результаты базы данных и написать их в ответ .getout OutputStream () или Ответ. GetWriter () точно так же, как вы пишете их в файл, за исключением того, что результат идет прямо к пользователю. Пока вы правильно устанавливаете заголовки контента, пользователь не заметит разницу.

Вы не можете позвонить в этот метод с другого сервлета, единственный способ сделать браузер загружать его в качестве файла - получить доступ к нему через обычный HTTP-запрос. Сначала вы объявляете сервлет в файле Web.xml, как будто вы бы служба RPC GWT:

<servlet>
    <servlet-name>ImageServlet</servlet-name>
    <servlet-class>
        com.package.ImageServlet
    </servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ImageServlet</servlet-name>
    <url-pattern>/imageServlet</url-pattern>
</servlet-mapping>

Теперь любой HTTP Get запросы собираются http: //your.tomcat.server/webapp/imagesivlet. будет забрать jobsivlet.doget (). Затем на стороне клиента вы можете сделать нормальную HTML-ссылку на файл:

new HTML("<a href='" + GWT.getHostPageBaseURL() + "imageServlet?file=" + filename + "'>download</a>");

...или ты должен быть в состоянии поставить это в кикнулку (я не проверял его):

Window.Location.assign(GWT.getHostPageBaseURL() + "imageServlet?file=" + filename);

Другие советы

Если файл - это текст, то вы всегда обратно обратно объект с массивом строк.
Если двоич, то просто байт [] в классе будет делать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top