通过 http 从连接到服务器的 NAS 下载文件

Posted

技术标签:

【中文标题】通过 http 从连接到服务器的 NAS 下载文件【英文标题】:Download file from NAS attached to server through http 【发布时间】:2018-05-23 16:03:01 【问题描述】:

我有许多文件存储在 NAS 中。 NAS 作为网络驱动器连接到服务器(假设它位于 Y://)。

我使用 xampp 来为我在 php 中构建的应用程序提供服务。该应用程序旨在为用户提供从 NAS 下载文件的服务,直接通过 http 而不是 ftp。

那么我可以设置来自 NAS 的文件,以便使用 http URL 下载,例如 example.com/files/the-file.zip 吗?

xampp位于C://目录

注意:xampp htdocs 已经设置为由域访问。所以这不是域指向问题

【问题讨论】:

Pointing domain name to server ip running XAMPP and wordpress的可能重复 不,我认为情况不同 【参考方案1】:

你可以通过 PHP 试试:

<?php
$downloadFolder = 'Y:/';

$fileName = $downloadFolder . $_GET['file'];
$sanitizedFileName = realpath($fileName);

if($fileName !== $sanitizedFileName) 
  throw new RuntimeException('Someone tried to escape');


// As seen in http://php.net/readfile:
if (file_exists($fileName)) 
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($fileName).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($fileName));
    readfile($fileName);
    exit;

或者找到一种通过 .htaccess 运行所有内容的方法,但这可能会减少您对安全处理的控制(可能您不想从其他目录或其他驱动器提供文件)

【讨论】:

谢谢!但我只是好奇检查已清理文件的功能是什么?因为我总是得到那个错误。但是在我评论那行之后,文件就被下载了。但它已损坏。那么现在的问题是什么?仅供参考,文件很大(以 GB 为单位) 啊!现在可以了!我在 readfile() 之前和之后添加 ob_get_clean() 和 ob_flush() 我们需要在 $downloadFolder 中添加双反斜杠,而不是单斜杠。现在可以了!

以上是关于通过 http 从连接到服务器的 NAS 下载文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Live555 从连接到 H264 编码器的 IP 摄像机流式传输实时视频

OpenWrt搭建文件共享服务(NAS)

TCP从连接到释放过程全解

如何使用 boto3 从连接到 ECS 任务的网络接口获取公共 IP

无法从连接到 Azure *** 的本地计算机(在家庭网络上)访问专用 AKS 群集

DAS,NAS和SAN都代表啥意思?