上传文件的验证器

时间:2019-01-17 11:39:53

标签: java spring

我需要一个验证器来上传文件,目前我可以上传所有文件,但我需要检查文件是否小于10 MB,并且只能使用文本格式,例如ms word,txt,ppt,excel(不可执行) ,可能是有害的)。 我是否必须为此使用Java库和Java库,或者我不知道是什么原因导致我是大三学生。如果有人有什么好主意。 我见过其他类似的问题,但我尝试过,但没有一个可以帮助我。 ps:我正在研究java spring。

这是我的代码已编译,但无法正常工作,可能需要编辑并检查其长度。

 class FileUploader implements Receiver, SucceededListener, FailedListener, ProgressListener {
    private static final long serialVersionUID = 1L;
    public File file;
    public String filename;

    @Override
    public void updateProgress(long readBytes, long contentLength) {
        UI ui = UI.getCurrent();
        ui.access(() -> {
            progressBar.setCaption("Uploaded: " + (float) readBytes / (float) contentLength * 100 + "%");
            progressBar.setValue((float) readBytes / (float) contentLength);
            progressBar.setVisible(true);
        });
    }

    @Override
    public void uploadFailed(FailedEvent event) {
        UIHelper.showErrorNotification("File could not be uploaded");
    }

    @Override
    public void uploadSucceeded(SucceededEvent event) {
        try {           
            String savePath = "/var/ccpt_work_files/";
            Path filePath = Paths.get(savePath);            
            if (Files.exists(filePath)) {
                copyFiles("/tmp/" + event.getFilename(), savePath + event.getFilename(), savePath + event.getFilename());
            } else {
                File targetFile = new File(savePath);
                if (!targetFile.mkdirs()) {
                    UIHelper.showErrorNotification("Couldn't create dir: " + targetFile);
                } else {
                    copyFiles("/tmp/" + event.getFilename(), savePath + event.getFilename(), savePath + event.getFilename());
                }
            }
        } catch (IOException e) {
            UIHelper.showErrorNotification("File could not be uploaded");
        }
        UIHelper.showInformationNotification("File successfully uploaded");
    }

    private void copyFiles(String from, String to, String finalPath) throws IOException {
        com.google.common.io.Files.copy(new File(from), new File(to));
        uploadedFilePath = finalPath;
    }

    @Override
    public OutputStream receiveUpload(String filename, String mimeType) {
        this.filename = filename;
        FileOutputStream fos = null;
        try {
            file = new File("/tmp/" + filename);
            fos = new FileOutputStream(file);
            if (!file.exists()) {
                file.createNewFile();
            }
        } catch (final IOException e) {
            UIHelper.showErrorNotification("File could not be stored in server");
            return null;
        }
        return fos;
    }       
};

2 个答案:

答案 0 :(得分:1)

如果您已经具有类型为java.io.File的File对象,则只需检查文件大小和mime类型

boolean hasValidFileSize(File file, double maxFileSize) {
    double bytes = file.length();
    double megabytes = (kilobytes / 1024) / 1024;

    if (megabytes > maxFileSize) {
        return false;
    }
    return true;
}

对于非有害文件,您只需检查MIME类型即可。寻找有关如何获取需要允许的文件的mime类型并将其与文件的mime类型进行比较的方法。

答案 1 :(得分:0)

您可以使用此方法获取文件的fileSize。

    static String getFileSizeMegaBytes(File file) {
       return (double) file.length() / (1024 * 1024) + " mb";
    }

请参阅该帖子以获取文件类型。

File tyle extension