Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с изображенями средствами Struts, Как показать картинку из базы? 
V
    Опции темы
Maksym
  Дата 8.6.2006, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



Загружаю изображение так:
Код

<html:form action="PhotoEdit" method="POST" enctype="multipart/form-data" >
  <html:file property="photo" />
  <html:submit>Upload Photo</html:submit>
</html:form>

Созданы соответствующий Action - PhotoEdit и ActionForm для него.
Как здесь же сразу показать загруженную картинку? Есть ли в Struts готовые решения?  smile  
PM MAIL   Вверх
tux
Дата 8.6.2006, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Нет специальных средств. Напиши action, который будет картинку в response выдавать. Выглядеть он будет примерно так:
Код

public class ShowPhotoAction extends Action {

    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        
        byte[] image = getImage();
        response.getOutputStream().write(image);
        return null;
    }
    
    private byte[] getImage() {
        // здесь берем откуда-то массив с изображением
    }

}

Потом кидаешь ссылку на этот action в JSP и фсё. Ну ессно, если картинка большая, то лучше из потока писать, а не из массива. 
PM MAIL Skype GTalk Jabber YIM   Вверх
Maksym
Дата 8.6.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



tux
Спасибо. Но мне же нужно не весь response картинкой занять. Картинка где-то внутри сложной страницы выводится... 
PM MAIL   Вверх
batigoal
Дата 8.6.2006, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



Сделай ее отдельной страницей, и пропиши внутрь тега <img src="...">. 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Maksym
Дата 8.6.2006, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



Lamer George
tux

Прописал
Код
<img src="./ShowPhoto.do" alt="Photo">
, при том, что в struts-config.xml:
Код
<action path="/ShowPhoto" type="crewing.actions.ShowPhotoAction"></action>
, где ShowPhotoAction - описанный tuxом выше Action. Все отлично работает. Спасибо, вопрос решен  smile smile 

ЗЫ.
Передаю в request'е номер изображения для ShowPhotoAction и он у меня вообще отличненько паказывает фотки в любом месте системы. Здорово  smile  
PM MAIL   Вверх
MisterCleric
Дата 21.6.2006, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Ребята, а покажите плз, как выглядит страничка с таким тегом    
<img src="./ShowPhoto.do" alt="Photo"> 
как выглядит к ней обращение, 
и как обращаться к  ShowPhotoAction ? 


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
Maksym
Дата 21.6.2006, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



MisterCleric
не понял  smile 
Страничка выглядит обычно - страничка с картинкой..
ShowPhoto.do - и есть обращение к ShowPhotoAction - я же выше написал как он у меня замапен. 

Это сообщение отредактировал(а) Maksym - 21.6.2006, 13:02
PM MAIL   Вверх
MisterCleric
Дата 21.6.2006, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Дело в том, что я делаю сначала аплод картинкы, а потом пытаюсь его показать таким образом, как у тебя. Вот аплод проходит, а показывать не хочет.
И аплод и метод показа в одном экшене. Т.е. аплодю и показываю за один раз. Но вот нет не хочет 


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
tux
Дата 21.6.2006, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Цитата(MisterCleric @  21.6.2006,  18:49 Найти цитируемый пост)
И аплод и метод показа в одном экшене. Т.е. аплодю и показываю за один раз. Но вот нет не хочет  

А что именно не получается? Поконкретнее пожалуйста. 
PM MAIL Skype GTalk Jabber YIM   Вверх
MisterCleric
Дата 21.6.2006, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Вот код Экшина по аплоду и показу:
Код

import com.opensymphony.xwork.ActionSupport;

import javax.imageio.ImageIO;
import java.io.*;
import java.awt.image.BufferedImage;

public class FileUploadAction extends ActionSupport {
    private File doc;
    private String fileName;
    private String contentType;
    private int contentLength;
    private int bufferSize;
    private byte[] buffer = null;

    public String doDefault() {
         return "myImageResult";
     }
     public String getDocFileName() {
        return fileName;
    }
    public void setDocFileName(String fileName) {
        this.fileName = fileName;
    }

    public String getDocContentType() {
        return contentType;
    }
    public void setDocContentType(String contentType) {
        this.contentType = contentType;
    }

    public int getDocContentLength() {
        return contentLength;
    }
    public void setDocContentLength(int contentLength) {
        this.contentLength = contentLength;
    }

    public void setDocBufferSize(int bufferSize) {
        this.bufferSize = bufferSize;
    }
   public int getDocBufferSize() {
       return bufferSize;
   }

    public File getDoc() {
        return doc;
    }
    public void setDoc(File doc) {
        this.doc = doc;
    }
   public byte[] getImageInBytes() {
       return buffer;
   }
   public String execute(){
       try {
          BufferedImage image = ImageIO.read(this.getClass().getResource(doc.getPath()));
          ByteArrayOutputStream bos = new ByteArrayOutputStream();
          ImageIO.write(image, "jpg", bos);
          buffer = bos.toByteArray();
          } catch (Exception e) {
              e.printStackTrace();
          }
       return SUCCESS;
    }
}

Вот код резалта:
Код

import com.opensymphony.xwork.*;
import com.opensymphony.webwork.ServletActionContext;
import javax.servlet.http.HttpServletResponse;

public class BytesResult implements Result {

    public void execute(ActionInvocation invocation) throws Exception {
        FileUploadAction action = (FileUploadAction) invocation.getAction();
        HttpServletResponse response = ServletActionContext.getResponse();

        response.setContentType(action.getDocContentType());
        response.setContentLength(action.getDocContentLength());

        response.getOutputStream().write(action.getImageInBytes());
        response.getOutputStream().flush();
    }
}

Вот XWork
Код

<xwork>
    <include file="webwork-default.xml" />

  <package name="fileupload" extends="webwork-default">
    <result-types>
        <result-type name="myBytesResult" class="mycom.wwuploadimg.BytesResult" />
    </result-types>
   
    <action name="doUpload" class="mycom.wwuploadimg.FileUploadAction">
        <interceptor-ref name="completeStack"/>
        <result name="myImageResult" type="myBytesResult">
            <param name="contentType">${docContentType}</param>
            <param name="contentLength">${docContentLength}</param>
            <param name="buffersize">${docBufferSize}</param>
        </result>
    </action>

    </package>
</xwork>

А вот странички загрузка и показ соответсвенно:
Код

    <ww:form action="doUpload" method="POST" enctype="multipart/form-data">
        <ww:file name="doc" label="File"/>
        <ww:submit />
    </ww:form>
-----------------------------------------------------
<img src="/upandimg/doUpload!default.action" />
 


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
Maksym
Дата 21.6.2006, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



MisterCleric
Как ты храниш и извлекаеш изображение? покажи код работы с базой, какая СУБД, какой тип поля..? 
PM MAIL   Вверх
tux
Дата 21.6.2006, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



MisterCleric, ты скажи в чем проблема-то. Здесь же не телепаты сидят. Симптомы опиши. 
PM MAIL Skype GTalk Jabber YIM   Вверх
Maksym
Дата 21.6.2006, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



MisterCleric
О сори, пока писал про данные, ты добавил свой код.. И что происходит при аплоаде? 

ЗЫ. Неплохо бы все таки разделить загрузку и показ изображения на два разных action, а потому аккуратно протрассировать, проследить везде ли передается массив байт изображения. 

Это сообщение отредактировал(а) Maksym - 21.6.2006, 14:12
PM MAIL   Вверх
MisterCleric
Дата 21.6.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



ок. Понял спасибо  


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0836 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.