如何生成下载链接位于laravel中另一台服务器上的文件

时间:2016-11-16 13:12:18

标签: laravel laravel-5 laravel-4

我将我的视频放在我的共享网络主机上,用户可以直接下载所有文件。但我想隐藏我的实际文件路径并制作有时间限制的下载链接。 如果文件在同一台服务器上,它可以正常工作。 当我使用这段代码时:

return response()->download('/home2/alihoss1/domains/alihossein.ir/public_html/dl/video/MySql/Sql1.mp4');

我看到了这个错误:

is_file(): open_basedir restriction in effect. File(/home2/alihoss1/domains/alihossein.ir/public_html/dl/video/MySql/Sql1.mp4) is not within the allowed path(s): (/home2/alihosse/domains/alihossein.ir/:/tmp/:/usr/local/php-7.0/lib/php/)

您会推荐什么解决方案? 视频和laravel项目不是主机。

1 个答案:

答案 0 :(得分:0)

您可以使用类似file_get_contents()的内容从其他服务器获取文件。这会导致不必要的流量,因为服务器1会从服务器2下载文件。这也适用于scp等。

您应该考虑加密:

$hash = encrypt([
    'valid_to' => strtotime('+30 minutes'),
    'file_path' => '/home2/alihoss1/domains/alihossein.ir/public_html/dl/video/MySql/Sql1.mp4'
]);

return redirect('http://server2.example/download/hash/' . urlencode($hash));

然后,您需要使用相同的密钥在第二台服务器上解密它。如果您没有安装laravel,则可以实现自己的解密功能(请参阅:laravel openssl encryption)。