fileUpload 如何获取filename后缀

event只能获取到byte[],我需要判定上传的是哪个版本的excel

<fileUpload id="importField" uploadButtonIcon="UPLOAD" uploadButtonCaption="msg:///import"
                            permittedExtensions=".xlsx"/>

public void onImportFieldValueChange(HasValue.ValueChangeEvent<byte[]> event) {

用这个事件:

@Subscribe("fileUpload")
public void onFileUploadFileUploadFinish(final UploadField.FileUploadFinishEvent event) {
    System.out.println(event.getFileName());
}

这个事件能获取不到文件内容,需要同时获取文件内容和文件后缀

可以两个事件都监听嘛:

private String fileName;
private boolean isFileNameSet = false;

@Subscribe("fileUpload")
public void onFileUploadFileUploadFinish(final UploadField.FileUploadFinishEvent event) {
    fileName = event.getFileName();
    isFileNameSet = true;
}

@Subscribe("fileUpload")
public void onFileUploadValueChange(final HasValue.ValueChangeEvent<byte[]> event) throws InterruptedException {
    do{
        if(isFileNameSet){
            tryProcessFileName();
            break;
        }
        Thread.sleep(500);
    }while (!isFileNameSet);
    isFileNameSet = false;
    processFileContent(event.getValue());
}

private void tryProcessFileName(){
    System.out.println("filename processed");
};
private void processFileContent(byte[] content){
    System.out.println("file content processed");
}

只能这么处理吗?有点不友好

我看了看这个控件好像就只能这么处理。因为它保存的是 byte[] 内容。

如果用 fileStorageUpload,就可以同时拿到这些信息:

@Autowired
private FileStorageLocator fileStorageLocator;

@Subscribe("fileUpload")
public void onFileUploadValueChange1(final HasValue.ValueChangeEvent<FileRef> event){
    FileRef file = event.getValue();

    System.out.println(file.getFileName());

    try (var inputStream = fileStorageLocator.getDefault().openStream(file)) {
        byte[] bytes = inputStream.readAllBytes();
        System.out.println(bytes.length);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}