我有一個FileUploadField組件,我只想上傳*.css
或*.html
文件。但現在,我可以上傳任何類型的文件。我怎樣才能將文件的擴展名設置爲該組件?我的代碼和平:如何在Wicket,FileUploadField中設置文件擴展名?
FileUploadField ret = new FileUploadField("uploadField");
ret.setRequired(true);
form.add(fileUploadField);
謝謝!
我有一個FileUploadField組件,我只想上傳*.css
或*.html
文件。但現在,我可以上傳任何類型的文件。我怎樣才能將文件的擴展名設置爲該組件?我的代碼和平:如何在Wicket,FileUploadField中設置文件擴展名?
FileUploadField ret = new FileUploadField("uploadField");
ret.setRequired(true);
form.add(fileUploadField);
謝謝!
我不得不將其設置在HTML文件中,而不是在java文件:
<input type="file" wicket:id="uploadField" accept=".csv, .html"/>
使用新的文件()
File newFile = new File("yourPath", "yourFilename.css");
newFile.createNewFile();
yourUpload.writeTo(newFile);
這就是它!
請注意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
}
};
您可以創建擴展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);
}
}
}
}
但我必須使用'FileUploadField'組件來選擇並上傳文件。所以當fileupload選擇器出現時,它應該只接受'* .css'或/和'* .html' – victorio
哦,當然。比你需要添加accept =「.css,.html」到字段。所以這是一個誤解。 – LinuxLuigi