Написание прокси в Grails - PullRequest
2 голосов
/ 16 марта 2012

Я использую Gralis 1.3.7.Я пишу контроллер, который должен получить файл PDF с другого сервера и вернуть его клиенту.Я хотел бы сделать это достаточно эффективным способом, например, следующим:

class DocController {
    def view = {
        URL source = new URL("http://server.com?docid=${params.docid}");

        response.contentType = 'application/pdf';
        // Something like this to set the content length
        response.setHeader("Content-Length", source.contentLength.toString());
        response << source.openStream();
    }
}

Проблема, с которой я сталкиваюсь, состоит в том, чтобы выяснить, как установить длину содержимого ответа моего контроллера на основе информациивозвращаясь с source.Мне не удалось найти документацию по классу URL, улучшенную с помощью grails.

Какой лучший способ продолжить?

Gene

EDITED: исправлены значения параметров вsetHeader

ОБНОВЛЕНО 16 марта 2012 г. 10:49 PST

ОБНОВЛЕНО 19 марта 2012 г. 10:45 PST Перемещено продолжение к отдельному вопросу.

1 Ответ

2 голосов
/ 16 марта 2012

Вы можете использовать java.net.URLConnection объект, который позволит вам выполнить более детальную работу с URL.

URLConnection connection = new URL(url).openConnection()

def url = new URL("http://www.aboutgroovy.com")
def connection = url.openConnection()
println connection.responseCode        // ===> 200
println connection.responseMessage     // ===> OK
println connection.contentLength       // ===> 4216
println connection.contentType         // ===> text/html
println connection.date                // ===> 1191250061000
println connection.lastModified

// print headers
connection.headerFields.each{println it}

Ваш пример должен выглядеть примерно так:

class DocController {
    def view = {
        URL source = new URL("http://server.com?docid=${params.docid}");
        URLConnection connection = source.openConnection();

        response.contentType = 'application/pdf';

        // Set the content length
        response.setHeader("Content-Length", connection.contentLength.toString());

        // Get the input stream from the connection
        response.outputStream << connection.getInputStream();
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...