Merhaba arkadaşlar JSF de veritabanıma resim kaydetmem lazım nasıl yapabilirim?

Primefaces'in bu komponentini kullanmayı düşünüyorum http://www.primefaces.org/showcase/ui/file/upload/basic.xhtml

soruldu: 18 Tem '14, 07:53

HakanKav%C3%A7in's gravatar image

HakanKavçin
286182024
cevap kabul oranı: 37%

değiştirildi: 19 Tem '14, 12:04


Evet Primefaces fileUploadı kullanabilirsin, fileUpload üzerinden gelen dosyayı byte arraya çevirip veritabanına kaydedebilirsin.

public void handleFileUpload(FileUploadEvent event) {
        try {
            InputStream inputStream = event.getFile().getInputstream();
            byte[] bytes = IOUtils.toByteArray(inputStream); 
            String fileType = event.getFile().getContentType();
            String fileName=event.getFile().getFileName();
//veritabanına göndermek için kullanabileceğin bilgiler, bytes, fileType ve fileName
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
permanent link

cevaplandı: 18 Tem '14, 08:55

SaRPaRDa's gravatar image

SaRPaRDa
5.0k213165
cevap kabul oranı: 27%

2

Tabi eğer çok önemli bir gerekçe yoksa, resimlerin veritabanına kayıt edilmesi iyi bir yöntem değildir.

(18 Tem '14, 09:39) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

Şimdi şöyle yapmayı denedim DAO ile kodladığım için .xhtml'e primefacesten kodu aldım

     <h:form id="form" >
        <p:fileUpload fileUploadListener="#{musteriBean.upload}"
allowTypes="/(\\.|\\/)(gif|jpe?g|png)$/" sizeLimit="100000" description="Select Images"/>
    </h:form>

upload'a basılınca ise sizin verdiniz kodu çağırdım.Zaten Bean,Dao ve Model ile hiç iletşim kurmadım hali ile databaseye ulaşamadım.Bean'da ve Dao'da hangi kodu kullanmam lazım internette aradım ancak bulamadım

Şuanki web görünümü:

Resim: http://www.btsoru.com/upfiles/cats_8.jpg

(18 Tem '14, 12:07) HakanKavçin HakanKav%C3%A7in's gravatar image
1

web.xml içine aşağıdaki filter'ı eklemeyi unutmayınız;

<filter> <filter-name>PrimeFaces FileUpload Filter</filter-name> <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> </filter>

<filter-mapping> <filter-name>PrimeFaces FileUpload Filter</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping>

(18 Tem '14, 18:10) Turgay Can Turgay%20Can's gravatar image
1

Bean içerisine byte[] tipinde yeni bir değişken tanımla. fileUploaddan gelen veriyi bu değişkenine aktar. Örnekte vediğim,

byte[] bytes = IOUtils.toByteArray(inputStream); //satırının yerine
yeni = IOUtils.toByteArray(inputStream); //tanımladığın değişkenin ismini ver.

yeni isimli değişkeni istediğin gibi DAO katmanına gönderebilirsin.

fileUpload kodların aşağıdaki gibi olabilir,

<p:fileUpload fileUploadListener="#{musteriBean.handleFileUpload}"  
        mode="advanced" allowTypes="/(\\\\.|\\\\/)(gif|jpe?g|png)$/"
        update=":mainGrowl" description="Select Images" 
        auto="true">
</p:fileUpload >
(18 Tem '14, 19:02) SaRPaRDa SaRPaRDa's gravatar image
1

primefaces'in örneği bundan biraz farklı. file isminde bir değişken tanımlamış.

private UploadedFile file;

fileUpload'ın bu değişkene yazmasını sağlamış.

<p:fileUpload value="#{fileUploadView.file}"

ve buton aracılığıyla upload() prosedürünü çalıştırmış. sen prosedürün içerisinden veritabanına kaydını gönderebilirsin. UploadedFile tipindeki değişkeni byte arraya çevirmen gerekecektir. Bunun içinde aşağıdaki kodu kullanabilirsin.

byte[] bytes = file.getContents();
dao.save(bytes, fileName, filesType); //dao katmanına gönder ve kaydet.
(18 Tem '14, 19:08) SaRPaRDa SaRPaRDa's gravatar image

İlgileriniz için çok teşekkür ederim :)

Acaba ben nerede yanlış yapıyorum? Bean'da dediğiniz gibi kodu yazdım

         byte[] bytes = IOUtils.toByteArray(inputStream);
         yeni=IOUtils.toByteArray(inputStream);
         musteriModel.setProfilresmi(bytes);

Dao'da preparedStatement.setBytes(3, musteriModel.getProfilresmi()); şeklinde çağırdım.

Bean

    private UploadedFile file;

    public UploadedFile getFile() {
        return file;
    }

    public void setFile(UploadedFile file) {
        this.file = file;
    }
             byte[] yeni;
    public void upload(FileUploadEvent event) {
         try {
              InputStream inputStream = event.getFile().getInputstream();
             byte[] bytes = IOUtils.toByteArray(inputStream);
            yeni=IOUtils.toByteArray(inputStream);
             musteriModel.setProfilresmi(bytes);
             String fileType = event.getFile().getContentType();
             String fileName=event.getFile().getFileName();

         } catch (IOException e) {
             e.printStackTrace();
         }
    }

Dao

   public class MusteriDao
{
MusteriBean musteriBean;
public byte[] data;

public boolean musteriKaydet(MusteriModel musteriModel)
{

    PreparedStatement preparedStatement = null;
    try
    {
        preparedStatement = MusteriBean.baglanti.prepareStatement("insert into musteri (musteriadi, musterisoyadi,profilresmi) values (?,?,?)");
        preparedStatement.setString(1, musteriModel.getMusteriadi());
        preparedStatement.setString(2, musteriModel.getMusterisoyadi());
        preparedStatement.setBytes(3, musteriModel.getProfilresmi());
        preparedStatement.executeUpdate();
        return true;

    }
    catch (Exception e)
    {
        e.printStackTrace();
        return false;

    }

}

Model

private byte[] profilresmi;

public byte[] getProfilresmi()
{
    return profilresmi;
}
public void setProfilresmi(byte[] profilresmi)
{
    this.profilresmi = profilresmi;
}

upload buttonuna tıkladığımda da exceptionsunu alıyorum

javax.el.MethodNotFoundException: /MusteriIslem.xhtml @92,49 fileUploadListener="#{musteriBean.file}":   
 Method not found: net.arma.bean.MusteriBean@3233d56a.file(org.primefaces.event.FileUploadEvent)
permanent link

cevaplandı: 19 Tem '14, 01:47

HakanKav%C3%A7in's gravatar image

HakanKavçin
286182024
cevap kabul oranı: 37%

değiştirildi: 19 Tem '14, 03:39

1

fileUploadListener=#{musteriBean. upload} metodunuzu çağırınız.

(19 Tem '14, 07:08) Turgay Can Turgay%20Can's gravatar image

Teşekkür ederim ancak .xhtml o şeklinde yapınca yine exceptions alıyorum başka bir fikriniz var mı acaba ? Kodlarda bir hata ben göremiyorum ancak Bean,Dao ya bir bakar mısınız?

WARNING: /MusteriIslem.xhtml @93,49 fileUploadListener="#{musteriBean.upload()}": Method not found: net.armabilgisayar.bean.MusteriBean@6eb8d425.upload()
javax.el.MethodNotFoundException: /MusteriIslem.xhtml @93,49 fileUploadListener="#{musteriBean.upload()}": Method not found: net.armabilgisayar.bean.MusteriBean@6eb8d425.upload()
(19 Tem '14, 07:21) HakanKavçin HakanKav%C3%A7in's gravatar image
1

fileUploadListener="# {musteriBean.file}": - > javax.el.MethodNotFoundException:

exception metodu görmüyorum diyor. musteriBean.upload <-- bu şekilde yazarmısın.

upload() -> bunu kullanma çünkü FileUploadEvent parametresi bekliyor.

(19 Tem '14, 07:34) Turgay Can Turgay%20Can's gravatar image

Evet dediğinizi yaptım ve exceptions yemedim :) ve kaydetme işlemim gerçekleşti ancak bir pürüz var resimde kullanici fotografıni seçtikten sonra eğer "UPLOAD" demez ise fotografı kaydetmiyor ve kullaniciyi kaydet dediğinde fotografsız kaydediyor http://www.btsoru.com/upfiles/cats_9.jpg

(19 Tem '14, 07:50) HakanKavçin HakanKav%C3%A7in's gravatar image
1

Controller'da kontrol ekleyiniz. Upload metodu işlemini bitirdikten sonra file değerini set ediniz. Save işlmeini yaparkende parametreleri kontrol ediniz.

bir metod yazın tüm zorunlu alanlar için;

private boolean isSaveable(){ return property1 != null && property2 !=null && StringUtils.isNotBlank(stringProperty3); }

gibi;

save metod içindede

if (isSaveable()){ //dao.save işleminiz. }

gibi..

(19 Tem '14, 08:09) Turgay Can Turgay%20Can's gravatar image
1

fileUpload'ın auto özelliğini true yapıp denermisin. Primefaces' in sitesinde pdf doküman var. Oradan tüm özelliklerine bakıp istediğin gibi ayarlayabilirsin.

(19 Tem '14, 18:41) SaRPaRDa SaRPaRDa's gravatar image

Teşekkürler.Garip bir olay ile karşılaştım panelGridlerin içerisinde fileUpload çalışmıyor. http://www.btsoru.com/upfiles/cats_12.jpg

Exceptions: Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/x-www-form-urlencoded; charset=UTF-8

form'a

   enctype="multipart/form-data"

özelliğinide ekledim

(20 Tem '14, 02:37) HakanKavçin HakanKav%C3%A7in's gravatar image
7 yorumdan 5 tanesi gösteriliyor hepsini göster
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×281
×66

Soruldu: 18 Tem '14, 07:53

Görüntüleme: 935 kez

Son güncelleme: 20 Tem '14, 02:50

powered by BitNami OSQA