上传图片不起作用?

时间:2014-01-16 16:09:04

标签: java vaadin vaadin7

我使用submitUpload()创建了一个图片上传,但是当我点击我的按钮时,我确实有效,但是当我在方法中添加submitUpload()时却没有。

这是我正在使用的课程:

// save image
public class ImageUpload implements Receiver{
private File file;
private String foto;
private final String path = "/home/fernando/curriculum/";
private String cpf;

/** add cpf document */
public void setCpf(String cpf){
    this.cpf = cpf;
}

/** save image */
@Override
public OutputStream receiveUpload(String filename, String mimeType) {       
    FileOutputStream fos = null;                
    try{
        file = new File(filename);          
        if(file.getName().endsWith("jpg")){             
            String cpfNumeros = this.cpf.replaceAll("\\.", "").replace("-", ""); //remove mask cpf
            String[] imagem = filename.split("\\."); //get jpg
            String novaImagem = cpfNumeros + "." + imagem[1]; // define name new image

            // new image                
            File newFile = new File(path + novaImagem);
            if(newFile.exists()){
                newFile.delete();                   
            }
            fos = new FileOutputStream(newFile); //salva imagem             
        }else{
            new Notification("Erro de arquivo<br/>", 
                            "Somente arquivos jpg são permitidos", 
                            Notification.Type.ERROR_MESSAGE)
                            .show(Page.getCurrent());
        }           
    }catch(FileNotFoundException ex){
        new Notification("File not found<br/>", 
                     ex.getLocalizedMessage(), 
                     Notification.Type.ERROR_MESSAGE)
                     .show(Page.getCurrent());
        return null;
    }
    return fos;
}   
}


public class ImageUploadView extends CustomComponents {      
    //upload image
    ImageUpload imageUpload = new ImageUpload();
    final Upload upload = new Upload("", imageUpload);
    upload.setCaption("Image");     
    upload.setButtonCaption(null);  
    mainLayout.addComponent(upload);

    Button btnSave = new Button("Save");
    btnSave.addClickListener(new Button.ClickListener() {
        @Override
        public void buttonClick(ClickEvent event) {
            save(); //call save method          
        }
    });

}

/** save informations on db and save image of user */
private void save(){
     if(!cpf.getValue().trim().isEmpty()){
          imageUpload.setCpf(cpf.getValue());
          upload.submitUpload();     
     }
}

如果我调用方法保存submitUpload()不起作用,但是当我直接在Button上监听submitUpload()时,监听器确实有效。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

尝试这一个,我们正在使用它:

public class Demographic extends CustomComponent implements Upload.SucceededListener,Upload.FailedListener, Upload.Receiver,Upload.ProgressListener
{
    private Upload uploadPic;
     public Demographic()
     {
        mainLayout = new AbsoluteLayout();
        mainLayout.setImmediate(true);
        mainLayout.setWidth("100%");
        mainLayout.setHeight("100%");
        mainLayout.setMargin(false);

        uploadPic = new Upload("Upload image", this);
        uploadPic.setImmediate(true);
        uploadPic.setWidth("-1px");
        uploadPic.setHeight("-1px");                  
        mainLayout.addComponent(uploadPic, "top:135.0px;left:32.0px;");


        uploadPic.addListener((Upload.SucceededListener) this);
        uploadPic.addListener((Upload.FailedListener) this);          
        uploadPic.addListener((Upload.ProgressListener)this);
      }
      @Override
      public void uploadFailed(FailedEvent event) {
    // TODO Auto-generated method stub

        app.getMainWindow().showNotification("Error! <br />", "Upload Failed due           to: " + event.getReason().getMessage() ,             Window.Notification.TYPE_WARNING_MESSAGE);

      }
    @Override
    public void uploadSucceeded(SucceededEvent event) {
          // all success logic
          if(event.getMIMEType().contains("image")){//mimeType can be made a global variable and can set in Receive upload

        //  System.out.println(event.getFilename());

            savePicture(event.getFilename());// save pic to db from the path provided in receive upload


                app.getMainWindow().showNotification("Success! <br />", "Image upload successful!", Window.Notification.TYPE_TRAY_NOTIFICATION);
            }
        }
    }
    @Override
    public OutputStream receiveUpload(String filename, String mimeType) {
         FileOutputStream fos;

        if(mimeType.contains("image")){
          String basePath = getApplication().getContext().getBaseDirectory().getAbsolutePath() + "\\Documents\\"+filename;

          File file= new File(basePath);    
          boolean checkForDir = file.exists();

         if(!checkForDir){
         checkDir.mkdir();
          }
         try {
        // Open the file for writing.
            fos = new FileOutputStream(file);       
           } catch (final java.io.FileNotFoundException e) {

           // Error while opening the file. Not reported here.
                   //e.printStackTrace();

            return null;
         }

        }
        return fos;
    }
}

这里可能存在语法错误,但我的观点是解释这里的主要逻辑