You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows 10环境下Apache WebServer文件上传及与NiFi集成的技术咨询

Windows 10环境下Apache WebServer文件上传及与NiFi集成的技术咨询

嘿,我来帮你一步步理清这些问题:

一、给Apache添加文件上传功能的可行方案

Apache默认确实没有自带的文件上传界面,但有两种简单的实现方式,你可以根据需求选择:

1. 快速搭建PHP上传页面

如果你的Apache已经搭配了PHP(Windows下很多集成包比如XAMPP自带),写个简单的上传页面最快:

  • 先在Apache的根目录(比如C:\Apache24\htdocs)新建一个uploads文件夹,右键文件夹→属性→安全,给Everyone或者Apache用户组添加写入权限(不然Apache没法保存上传的文件)。
  • 新建index.html,内容如下:
<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
  选择文件上传:
  <input type="file" name="fileToUpload" id="fileToUpload">
  <input type="submit" value="上传文件" name="submit">
</form>
</body>
</html>
  • 再新建upload.php,内容如下:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// 检查文件是否已存在
if (file_exists($target_file)) {
  echo "抱歉,文件已存在。";
  $uploadOk = 0;
}

// 限制文件大小(比如5MB)
if ($_FILES["fileToUpload"]["size"] > 5000000) {
  echo "抱歉,你的文件太大了。";
  $uploadOk = 0;
}

// 允许的文件格式(可自行修改)
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" && $imageFileType != "txt" ) {
  echo "抱歉,只允许JPG, JPEG, PNG, GIF 和 TXT 文件。";
  $uploadOk = 0;
}

// 一切正常则尝试上传
if ($uploadOk == 0) {
  echo "抱歉,你的文件没有上传成功。";
} else {
  if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    echo "文件 ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " 上传成功。";
  } else {
    echo "抱歉,上传文件时出错了。";
  }
}
?>
  • 重启Apache,访问127.0.0.1就能看到上传界面,上传的文件会存在uploads文件夹里,访问127.0.0.1/uploads就能看到文件列表(因为你去掉了默认首页,会显示目录索引)。

2. 开启WebDAV实现“网络磁盘”式上传

如果想要更像本地文件系统的操作体验,可以开启Apache的WebDAV模块:

  • 打开Apache的配置文件httpd.conf,找到下面两行,去掉前面的#注释:
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
  • 在配置文件末尾添加WebDAV的目录配置:
Alias /webdav "C:\Apache24\htdocs\webdav"
<Directory "C:\Apache24\htdocs\webdav">
    DAV On
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
    # 可设置用户名密码提升安全性
    # AuthType Basic
    # AuthName "WebDAV"
    # AuthUserFile "C:\Apache24\conf\.htpasswd"
    # Require valid-user
</Directory>
  • 新建C:\Apache24\htdocs\webdav文件夹,同样设置写入权限,重启Apache。
  • 现在你可以用Windows文件管理器访问http://127.0.0.1/webdav,或者映射成网络驱动器,直接拖放文件上传,和操作本地文件夹一样。

二、和Apache NiFi集成的实现思路

你的同事的建议其实是合理的,用Apache作为本地文件的中转节点,配合NiFi构建数据流到Hadoop是很常见的轻量级采集方案,具体可以这么做:

1. 如果用WebDAV方案

NiFi有专门的WebDAV处理器(ListWebDAVFetchWebDAV),可以在远程NiFi上配置:

  • ListWebDAV处理器定时扫描本地Apache的WebDAV目录,获取新增的文件。
  • FetchWebDAV下载这些文件到NiFi的内容仓库。
  • 最后用PutHDFS处理器把文件上传到Hadoop集群。

2. 如果用PHP上传方案

可以让NiFi通过HTTP接口获取文件:

  • 先在Apache的uploads目录下写个简单的PHP接口,返回当前目录的文件列表(比如file_list.php)。
  • NiFi用InvokeHTTP调用这个接口,解析返回的文件列表。
  • 再用FetchHTTP逐个下载文件,之后用PutHDFS传到Hadoop。

如果远程NiFi能直接访问你Windows本地的共享文件夹(比如把htdocs/uploads设为共享),那也可以直接用NiFi的FetchFile处理器读取文件,不过这种方式需要网络权限,不如HTTP/WebDAV灵活。

三、关于你同事的建议是否合理

完全没问题!用Apache作为本地文件的暴露节点,NiFi处理数据流,是一种很稳妥的方案:

  • 本地Apache可以轻松实现文件上传和HTTP访问,不需要复杂的配置。
  • NiFi擅长处理这类跨节点的数据流,支持定时扫描、错误重试、数据转换等功能,正好匹配你把文件传到Hadoop的需求。
  • 相比直接暴露本地文件系统,用HTTP/WebDAV的方式更安全,也更容易穿透网络(如果远程NiFi不在同一个局域网的话)。

备注:内容来源于stack exchange,提问作者LJS

火山引擎 最新活动