首页 > 解决方案 > 上传文件的验证器

问题描述

我需要一个上传文件的验证器,目前我可以上传所有文件,但我需要检查文件是否小于 10 MB,并且只有文本格式,例如 ms word、txt、ppt、excel(不可执行,可能是有害)。我是否必须为此使用 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;
    }       
};

标签: javaspring

解决方案


如果您已经拥有 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 类型进行比较。


推荐阅读