我使用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()
时,监听器确实有效。
有什么想法吗?
答案 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;
}
}
这里可能存在语法错误,但我的观点是解释这里的主要逻辑