java - 上传文件的验证器
问题描述
我需要一个上传文件的验证器,目前我可以上传所有文件,但我需要检查文件是否小于 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;
}
};
解决方案
如果您已经拥有 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 类型进行比较。
推荐阅读
- python - 不使用搜索查询从所选频道获取*所有* Youtube 视频 ID
- rust - 如何在 Tokio 运行时上下文中从异步方法调用的非异步方法中等待未来?
- mysql - 这个 presto 查询有什么问题?
- macos - 如何解决 Big Sur 上的 CLT 问题?
- reactjs - 使用函数中的方法做出反应
- javascript - JavaScript 游戏中的设置间隔函数不是每 10 秒运行一次
- sql - 如何在 SQL 中添加更新列以添加外键
- css - 自定义钩子是最好的解决方案吗?
- python - 目标不匹配的张量流形状(cifar10)
- javascript - django模板中带有for循环的html表,需要一个表头