2013-11-27 42 views
2

我有一個FileUploadField組件,我只想上傳*.css*.html文件。但現在,我可以上傳任何類型的文件。我怎樣才能將文件的擴展名設置爲該組件?我的代碼和平:如何在Wicket,FileUploadField中設置文件擴展名?

FileUploadField ret = new FileUploadField("uploadField"); 
ret.setRequired(true); 
form.add(fileUploadField); 

謝謝!

回答

4

我不得不將其設置在HTML文件中,而不是在java文件:

<input type="file" wicket:id="uploadField" accept=".csv, .html"/> 
1

使用新的文件()

File newFile = new File("yourPath", "yourFilename.css"); 
newFile.createNewFile(); 
yourUpload.writeTo(newFile); 

這就是它!

+0

但我必須使用'FileUploadField'組件來選擇並上傳文件。所以當fileupload選擇器出現時,它應該只接受'* .css'或/和'* .html' – victorio

+1

哦,當然。比你需要添加accept =「.css,.html」到字段。所以這是一個誤解。 – LinuxLuigi

7

請注意accept是在現代瀏覽器只(Documentation),並且你已經檢查它在服務器上方太。

可能的解決方案:

FileUploadField ret = new FileUploadField("uploadField") { 
    @Override 
    protected void onComponentTag(ComponentTag tag) 
    { 
     // Default handling for component tag 
     super.onComponentTag(tag); 

     tag.put("accept", ".css,.html");   
    } 

    @Override 
    public List<FileUpload> getFileUploads() { 
     return filter(super.getFileUploads()); 
    } 

    private List<FileUpload> filter(List<FileUpload> fileUploads) { 
     // filter out all files with invalid extension 
    } 
}; 
3

您可以創建擴展AbstractValidator一個FileExtensionValidator並將其添加到您的上傳字段。

public class FileExtensionValidator extends AbstractValidator 
{ 
    private final List<String> allowedFileTypes = Arrays.asList("HTML","CSV"); 

    public void onValidate(IValidatable _validatable) 
    { 
    List files = (ArrayList) _validatable.getValue(); 
    for (Object o : files) 
    { 
     FileUpload file; 
     file = FileUpload.class.cast(o); 
     String fileName = file.getClientFileName(); 
     String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1); 
     if (!allowedFileTypes.contains(fileExt.toUpperCase())) 
     { 
     ValidationError error = new ValidationError(); 
     error.addMessageKey("UnsupportedExtension"); 
     error.setVariable("ValidExtensions", allowedFileTypes.toString()); 
     _validatable.error(error); 
     } 
    } 
    } 
} 
相關問題