2013-07-18 2 views
1

привет можно ли скачать файл с сервера с пропусканием списка в качестве параметраСкачать файл, используя Джерси и RestyGWT

с RestyGWT и Джерси 1,7?

На стороне сервера у меня есть следующие веб-службы

@POST 
@Produces(MediaType.APPLICATION_OCTET_STREAM) 
@Path("/download") 
public Response downloadFiles(@Context HttpServletResponse response, List<FileInfo> files) { 
    ZipFile zip = null; 

    String uuid = UUID.randomUUID().toString(); 
    response.setHeader("Content-Disposition", "attachment; filename=" 
      + uuid + ".zip"); 
    try { 
     zip = new ZipFile(response.getOutputStream()); 
     File f = new File(ConfigurationLoader.getRealPath("/logo.png")); 
     zip.addFile(f, ""); 
     zip.getOutputStream().flush(); 
     zip.getOutputStream().close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

, когда я типа в браузере локальный: 8080/URL/загрузить он работает, но как я могу скачать файл с Resty GWT или через Window.open()?

я хочу использовать POST не GET, так что я могу передать список сериализуемых объекта: например Список файлов.

я пытался на стороне клиента с RestyGWT:

@POST 
@Produces("application/zip") 
@Path("/download") 
public void downloadFiles(List<FileInfo> files, MethodCallback<Response> response); 

private static final Resource resource = new Resource(
       GWT.getHostPageBaseURL() + "rest/files"); 

     public static final FileRestService get() { 
      if (instance == null) { 
       instance = GWT.create(FileRestService.class); 
       ((RestServiceProxy) instance).setResource(resource); 
      } 
      return instance; 
     } 

, но он не работает, и я не могу найти примеры о загрузке файлов в restygwt

ответ

1

В целом (*) вы не можете использовать Ajax для загрузки файлов , поэтому вы должны использовать Window.open() или iframe, чтобы попросить пользователя сохранить файл как.

Посмотрите мой ответ в этом запросе: Window.open in GWT not open correctly with in a call back function

Конечно, используя плавающие фреймы вы не можете использовать POST, но вы можете закодировать петлю, чтобы попросить другой файл каждый раз, когда последний IFrame загружен. Пользователь будет запрашиваться столько раз, сколько загружаются файлы.

Вы можете использовать FormPanel, хотя добавьте некоторые скрытые параметры и отправьте его на сервер. FormPanel отображает ответ в скрытом iframe, поэтому, устанавливая соответствующие заголовки (контент-тип контента), вы можете загрузить файл и попросить пользователя сохранить его как. Я бы застегнул набор файлов, чтобы пользователь мог сохранить или открыть контент, так как у большей ОС есть утилиты для визуализации сжатых файлов.

(*) с помощью XHR вы можете скачивать файлы, но вам нужен способ обработки содержимого и отображения его пользователю. Он обычно используется для текстовых файлов html, txt, xml и т. Д. Взгляните на html5 api, чтобы получать и обрабатывать двоичные данные. Однако вы не можете создавать файлы в файловой системе пользователя.

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