Загрузите файл PNG из конечной точки HTTP со строкой запроса - PullRequest
2 голосов
/ 28 сентября 2011

Извините за плохой титул.

У меня есть URL-адрес, подобный следующему: http://testserver:8080/dummy/server?@_1231Fv_C

Когда я получаю доступ к этому URL-адресу через браузер, это возвращает мне изображение PNG.Но когда я пытаюсь получить его с помощью клиентского API Джерси, я не могу его скачать.(Я также пробовал java.nio)

См. Мой фрагмент кода

Client client = Client.create();
client.setFollowRedirects(true);
WebResource r = client.resource(url);
InputStream in = r.get (InputStream.class);
ByteStreams.copy(in, new FileOutputStream(savedFile));

Большое спасибо за вашу помощь.

Ответы [ 3 ]

1 голос
/ 08 июля 2012

@ символы зарезервированы, возможно, вам следует их кодировать (измените его на %40).

0 голосов
/ 06 сентября 2013

Я делаю так, и это работает

import java.io.File;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;

@Path("/image")
public class ImageService {

    private static final String FILE_PATH = "c:\\az-fu.png";

    @GET
    @Path("/get")
    @Produces("image/png")
    public Response getFile() {

        File file = new File(FILE_PATH);

        ResponseBuilder response = Response.ok((Object) file);
        response.header("Content-Disposition",
            "attachment; filename=image_from_server.png");
        return response.build();

    }

}

Диалог при нажатии из веб-браузера:

Dialog when I hit from web browser

0 голосов
/ 28 сентября 2011

Вы используете библиотеку Guava? Тогда стоит отметить, что ByteStreams.copy Копирует все байты из входного потока в выходной поток. Не закрывает и не очищает поток .

Вы должны очистить и закрыть свой FileOutputStream.

Будет лучше, если вы поделитесь более подробной информацией, например, об исключениях и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...