2015-04-22 1 views
1

У меня есть требование, когда я получаю несколько изображений из веб-службы (например: список) и должен записывать эти изображения в ServletOutputStream.Написание нескольких изображений на ServletOuputStream?

Когда я нажимаю ссылку «VIEW», он вызывает сервлет и этот сервлет вызывает веб-сервис и получает несколько изображений в виде списка.

Сейчас я пытаюсь написать эти образы в ServletOutputStream, который не работает ..

Попытка отправить изображения как почтовый

response.setContentType("application/zip"); 
    OutputStream os = null; 
BufferedOutputStream bos = null; 
ZipOutputStream zos = null;  
try{ 
    os = resp.getOutputStream(); 
    bos = new BufferedOutputStream(os); 

    zos = new ZipOutputStream(bos); 
    zos.setLevel(ZipOutputStream.STORED); 

    sendMultipleFiles(zos, annotContent,"display"); 
}catch (IOException e) { 
    resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 
} finally { 
    if (zos != null) { 
     zos.finish(); 
     zos.flush(); 
    } 
    bos.close(); 
    os.close(); 
} 

private void sendMultipleFiles(ZipOutputStream zos, Collection<byte[]> filesToSend, String name) throws IOException { 
    myLogger.info("sendMultipleFiles is invoked.."); 
    for(byte[] f: filesToSend) { 

     InputStream inStream = null; 
     ZipEntry ze = null; 

     try { 
      inStream = new ByteArrayInputStream(f); 

      ze = new ZipEntry(name + "-archived"); 
      ze.setComment("Dummy file"); 

      zos.putNextEntry(ze); 
      int readByte = 0; 
      while((readByte = inStream.read()) != -1) 
      { 
       zos.write(readByte); 
      } 
     } catch (IOException e) { 
      System.out.println("Cannot find "); 
     } finally { 
      if (ze != null) { 
       zos.closeEntry(); 
      } 
      inStream.close(); 

     } 
    } 

выше код не working..any предложения будут оценивается ..

+0

Вы должны создать zip-файл и добавить каждое изображение туда по одному. Затем напишите содержимое zip-файла в OutputStream. –

+0

Что клиент в этом случае? Обычно вы будете обслуживать HTML, который будет относиться к нескольким изображениям, каждый из которых вызовет отдельный запрос. Пожалуйста, дайте нам больше контекста. –

+0

@ Jon Skeet: Использование JSF .. Когда я нажимаю на ссылку «VIEW», она должна вызывать сервлет, а ответ (изображения) должен отображаться как всплывающее окно. –

ответ

1

Ваше решение будет зависеть от типа контента, который вы обслуживаете. Если вы подаете ответ HTML, проблема может быть решена путем сохранения изображений на диске (outside the context root и записи конечной точки изображения) или если изображения небольшие - отправка байтов как base64 encoding in the image tag directly.

Если ваш тип ответа не является HTML - вот несколько вариантов - вы можете вернуть ZIP file.

Менее стандартный способ использования сервлета с MultiPart MIME Extension.

Edit: Согласно комментария тип мим является JPEG - один вариант, чтобы объединить JPEG в один большой один (не может отправить несколько выход). Объединение байтов двоичного файла - JPEG имеет собственный формат сжатия, а также верхний и нижний колонтитулы, а также информацию EXIF ​​- вам могут понадобиться специализированные API, чтобы объединить их в один. Here - это тот, с которым я столкнулся. Если объединение JPG не является вариантом - то, что вы пытаетесь достичь, не может быть сделано в одной записи.

+0

My Mime type is: image/jpeg - не используя html Попытка слияния PDFS и записи в выходной поток..модифицированный код..pls см. Выше –

+0

Я не вижу, что вы упомянули здесь в комментарии, однако у меня есть отредактировал ответ - надеюсь, что это поможет. –

+0

Что вы имеете в виду, если не работаете? У вас есть трассировка стека или ошибка? –