Grails - загрузка изображения с контроллера - PullRequest
1 голос
/ 24 октября 2011

Я пытаюсь получить zip-файл с FTP, разархивировать его, получить из них xml-файл и файл изображения, проанализировать xml, отобразить содержимое xml и изображения.

byte[] image = ftpClientService.getThumbnailInZip(customer.ftpUser, 
    customer.ftpPassword, customer.ftpHost, customer.ftpToWrapDirectory, 
    fileName) 
FileOutputStream fos1 = new FileOutputStream("zip.img") 
try { 
    fos1.write(image); 
} finally { 
    fos1.close(); 
} 
return [
    command: this, 
    fileName: fileName, 
    applicationName: applicationName, 
    contentProvider: contentProvider, 
    operatingSystem: operatingSystem, 
    handSets: handSets, 
    zipImg:"zip.img" ]

Я мог бы успешно завершить часть xml и изображение, также я могу извлечь из zip-файла в байтовом формате (я мог бы преобразовать его в файл, используя файл outputtream),

Теперь я застрял в отправке изображения в GSP и отображать это.Любые входные данные высоко ценятся.

Спасибо

Ответы [ 3 ]

2 голосов
/ 24 октября 2011

Если вы хотите использовать изображение только один раз, то есть оно всегда должно быть извлечено из zip-файла, тогда встраивание img в формате base64 в веб-страницу является хорошим вариантом, потому что вам не нужно беспокоиться об изображении файл после отправки этого значения кодировки base64 в gsp.

Если вам все еще нужно, чтобы этот файл изображения использовался другими http-запросами, вам следует извлечь изображения в папку и отправить список путей img в gsp.

0 голосов
/ 19 января 2016

Браузеры могут отображать байтовые массивы, если вы укажете формат.

Имея переменную image в модели, отправляемой в gsp типа byte[], это способ визуализации HTML:

<img src="data:image/png;base64,${image.encodeBase64()}"/>

Вам также необходимо указать, является ли он image/png или другим форматом.

0 голосов
/ 24 октября 2011

Вы можете

  • указать img src="${g.createLink(action: 'a', params: [p: p])}" на другое действие (с createLink ), которое будет кэшировать изображение на стороне вашего сервера,
  • иливстроить его прямо в HTML, как в этом вопросе .
...