Система не может найти файл, указанный в jsf2.0 - PullRequest
0 голосов
/ 09 ноября 2011

Я использую jsf2.0 в eclipse ide. У меня проблема с хранением изображения в локальной папке. Изображения хранятся в локальной папке с 0 байтами. Изображения читаются и записываются в 0 байтов.

Backing Bean:

открытый класс uploadImageAction {

public void handleFileUpload(FileUploadEvent event) throws IOException {


    FacesContext context = FacesContext.getCurrentInstance();
    PhotoBean photoBean = (PhotoBean) context.getApplication().evaluateExpressionGet(context, "#{photoBean}", PhotoBean.class);
    PhotoBean photoBean2 = (PhotoBean) context.getApplication().evaluateExpressionGet(context, "#{photoBean2}", PhotoBean.class);

    ExternalContext extContext=FacesContext.getCurrentInstance().getExternalContext();

    File file = new  File(extContext.getRealPath(event.getFile().getFileName()));


      System.out.println("Hibernate save image into database");
        Session session = HibernateUtil1.getSessionFactory().openSession();

        session.beginTransaction();

        //save image into database
        //File file = new File("D:\\1.gif");
        //byte[] bFile = new byte[(int) file.length()];
        //System.out.println("DDDDDDDDDDDD"+bFile);

        byte[] bfile = new byte[(int)file.length()];
        System.out.println("DDDDDDDDDDDD"+bfile);
        try {
             FileInputStream fileInputStream = new FileInputStream(file);
             //convert file into array of bytes
             fileInputStream.read(bfile);
             fileInputStream.close();
            } catch (Exception e) {
                System.out.println("Cannnoy");
             e.printStackTrace();
            }

        String urlImage = file.toString();

        String imageName = event.getFile().getFileName();


        photoBean.setPathName(file);

        //file = photoBean.getPathName();

        photoBean.setImageName(imageName);

        imageName = photoBean.getImageName();

        photoBean.setUrl(urlImage);

        urlImage = photoBean.getUrl();


    //  PhotoDaoService photoDaoService = new PhotoDaoService();

        System.out.println("+++++++++++++++++++++++++"+file);


 System.out.println("CHECK BYTES"+bfile);
     //   uploadImageBean upldImageBean = new uploadImageBean();
        //upldImageBean.setImageByte(bfile);
        photoBean.setByteImage(bfile);
        //avatar.setImage(bFile);
       // System.out.println("dfdffdf"+upldImageBean.setImageByte(bFile));


        session.save(photoBean);


        //Get image from database
         photoBean2 = (PhotoBean)session.get(PhotoBean.class, photoBean.getId());
        byte[] bImage = photoBean2.getByteImage();
        System.out.println("QQQQQQQQQQQQQQQ"+bImage);
        int i=0;
        try{
            FileOutputStream fos = new FileOutputStream("e:/out/out"+0+".jpg"); 
            fos.write(bImage);
            fos.close();
            FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName()
                    + " is uploaded.");

                    FacesContext.getCurrentInstance().addMessage(null, msg);
        }catch(Exception e){
            e.printStackTrace();
            System.out.println("UPLOAD DISPLAY EXCEPTION");
        }

        session.getTransaction().commit();
    }

}

Ошибка возникает:

Hibernate save image into database
bytes[B@12fb7ef
java.io.FileNotFoundException: E:\Mecherie_project\.metadata\.plugins \org.eclipse.wst.server.core\tmp0\wtpwebapps\image_web\baby.jpg (The system cannot find  the file specified)

at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at image.uploadImageAction.handleFileUpload(uploadImageAction.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.el.parser.AstValue.invoke(AstValue.java:234)

1 Ответ

3 голосов
/ 09 ноября 2011

Как ответили много раз до , вы должны не хранить / размещать загруженные файлы в общедоступном веб-контенте.Вместо этого вы должны использовать абсолютный путь.Например,

File file = new File("/path/to/images", filename);
// ...

Загруженный файл магически отсутствует в расширенной WAR, поэтому чтение его с помощью FileInputStream не будет работать вообще.Вы должны прочитать его из event.getFile().getInputStream(), а затем записать в произвольный OutputStream, например FileOutputStream.

Но теперь ваша реальная проблема более ясна, чем в вашейпредыдущие вопросы.Вы, кажется, хотите сохранить загруженный файл в базе данных.Затем не нужно , чтобы сначала сохранить файл в файловой системе локального диска.Просто направьте полученные байты непосредственно в byte[] и сохраните его в БД.

InputStream input = event.getFile().getInputstream();
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];

for (int length; (length = input.read(buffer)) > -1;) {
    output.write(buffer, 0, length);
}

photoBean.setByteImage(output.toByteArray());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...