代码:
CSDN:https://download.csdn.net/download/qq_38038143/10849113
GitHub:https://github.com/GYT0313/FileUploadDownload
运行示例:
1. 介绍
目前为止,共写了三个版本的文件上传、下载。
其他版本:
- 使用Comm组件(最简单):https://blog.csdn.net/qq_38038143/article/details/84960993
- 使用Smart组件(稍复杂):https://blog.csdn.net/qq_38038143/article/details/84960293
该版本的简要介绍:
- 后台使用MySQL数据库记录文件名、文件地址
- 使用Hadoop技术实现“倒排索引”,实现基于文件内容查找文件
2. 项目结构
如上图:
Java代码共包含8个类:
- ClearAll.java,运行该类可以一次清空本地磁盘文件、HDFS文件、数据库记录
- DAO.java,调用实际执行SQL语句的类
- InvertedIndex.java,倒排索引文件,使用MapRedcuce框架实现
- JDBC.java,实际执行SQL语句的类
- JDBCExecute.java,SQL的简单封装
- LsitFileServelt.java,查询本地文件的Servlet
主要实现三种查询:
- listFile(Map<String, String> fileNameMap),查询本地磁盘的所有文件(文件名匹配)
- listFile(Map<String, String> fileNameMap, String searchKeyWord),根据关键词查询文件(文件名匹配)
- listByContent(Map<String, String> fileNameMap, String kw, String uploadFilePath),根据关键字查询文件内容,以此返回匹配的文件名
注:因为第二、三种查询都是基于关键字,所有实际执行中只有两种情况:有关键字、无关键字。
- SmartDownloadServlet.java,处理下载文件请求
- SmartUploadServlet.java,处理上传文件请求
WebContent结构:
static目录,包含前端的所有静态文件。
404.jsp,错误请求处理页面。
home-smart.jsp,主页,实现文件展示、上传、查询。
imgUpload.jsp,拖拽图片上传的处理页面。
以及众多的jar包。
注:
如果你在将此项目移植到你的电脑上时,注意修改一些路径。
如:InvertedIndex.java
下图中红框的两个路径时Eclipse的工作,并且是FileSmartHadoop项目的路径,存放的是经过MapReduce处理后的倒排索引文件,你只需要将D:\soft2\javaweb\work_space 改为你的工作目录即可。如果有问题,可以联系我。
3. 执行环境
执行环环境为:
- Windows10
- Eclipse
- Hadoop2.7.3
- Tomcat-9.0
4. 简述执行流程
创建数据库:
CREATE DATABASE IF NOT EXISTS smart_uploadDB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
USE smart_uploadDB;
CREATE TABLE `smart_upload` (
`id` int NOT NULL AUTO_INCREMENT ,
`filename` varchar(255) NULL COMMENT 'name' ,
`filepath` tinytext NULL COMMENT 'path' ,
PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
-
将项目导入Eclipse,加入Tomcat,启动服务
浏览器访问:http://localhost:8080/FileSmartHadoop/home-smart.jsp ,第一次访问如下图:
-
上传文件
上传后,再次访问,如下图:
-
输入关键字查询
因为没有上传倒排索引文件,索引只能根据文件名查询:
Search File栏查询: Linux
-
生成倒排索引文件:
注:本来想根据两次上传文件的间隔时间来自动判断是否需要生成倒排索引文件,即调用InvertedIndex.java类。但是,实际上设置调用语句后,一上传文件就报错:java.lang.ClassNotFoundException: org.apache.hadoop.conf.Configuration。但是单独执行InvertedIndex.java文件没有任何问题。捣鼓了很久没有成功,目前只能手动执行了。
确保正确安装配置Hadop,并开启服务:start-all.cmd
创建HDFS目录,CMD执行:
hdfs dfs -mkdir -p /data/fileSmartUpload
hdfs dfs -mkdir -p /output/
右键执行InvertedIndex.java文件。
执行结果:
part-r-00000内容如下:
- 再次查询
Search File栏查询: Linux
结果原因,查看倒排索索引文件:
含有Linux 内容的文件:
加上 <Linux下载.txt>,共四个。
- 下载示例:
点击下载
执行流程简述完毕。。。
5. 代码
CSDN:https://download.csdn.net/download/qq_38038143/10849113
GitHub:https://github.com/GYT0313/FileUploadDownload