2013-04-29 2 views
0

Я играю с Джерси и хотел бы знать, как нужно реализовать функцию «скачать». Например, допустим, у меня есть некоторые ресурсы под /files/, что я хотел бы «загрузить» через GET, как мне это сделать? Я уже знаю правильные аннотации и реализации для GET, PUT, POST, DELETE, но я не совсем уверен, как следует обрабатывать двоичные данные в этом случае. Может ли кто-нибудь указать мне в правильном направлении или показать мне простую реализацию? Я посмотрел на jersey-samples-1.4, но, похоже, я не могу найти то, что ищу.Как использовать Джерси в рестле для скачивания?

Большое спасибо!

+0

Не являются ли трикотажные изделия и не используются разные реализации API REST? Если это так, я не понимаю, почему вы хотите использовать оба одновременно. Возможно, вы имели в виду «REST», а не «Restlet»? –

ответ

1

Вы должны использовать аннотацию @Produces, чтобы указать, какой файл типа мультимедиа (pdf, zip и т. Д.). Спецификацию Java для этой аннотации можно найти here.

Ваш сервер должен вернуть созданный файл. Например, в ядре Java вы можете сделать что-то вроде этого:

@GET 
@Produces(MediaType.APPLICATION_OCTET_STREAM) 
@Path("path") 
public StreamingOutput getFile() { 
    return new StreamingOutput() { 
     public void write(OutputStream out) throws IOException, WebApplicationException { 
      try { 
       FileInputStream in = new FileInputStream(my_file); 
       byte[] buffer = new byte[4096]; 
       int length; 
       while ((length = in.read(buffer)) > 0){ 
        out.write(buffer, 0, length); 
       } 
       in.close(); 
      } catch (Exception e) { 
       throw new WebApplicationException(e); 
      } 
     } 
    }; 
} 
+0

Спасибо! Как насчет случая, когда у меня нет типа файла заранее, но знаете, что это двоичный файл? Я предполагаю, что '@ Produces' находится в методе? (Извините, не могли бы вы просто проиллюстрировать это методом с соответствующими аннотациями? Я знаю, как обращаться с потоковой частью ...) – carlspring

+0

ОК, я редактировал свой пост. Теперь у вас есть пример метода. Я думаю, что вы должны использовать APPLICATION_OCTET_STREAM, если ваш файл двоичный. В этом примере я использовал сообщение http://stackoverflow.com/a/3503704/987847 – pedjaradenkovic

+0

Спасибо большое! – carlspring

Смежные вопросы