我正在开发一个文件存储和共享 Web 应用程序,其中 API 后端使用 Laravel,前端应用程序使用 VueJS。
我必须使用 CRON 例程每分钟启动一个 BASH 脚本来加密上传的文件,但我需要使用 Laravel/PHP 将它们从控制器解密到 StreamDownload 响应中(我需要逐块解密文件,因为大文件我们的服务器使用了太多内存)。
我们决定从外部例程对文件进行加密,以防止用户等待加密,有时在文件上传后等待几分钟。
我在 Debian 4.9 服务器上使用 Laravel 5.7 和 PHP 7.3,但我在 Windows 10 上的本地计算机上使用 WAMP 和 PHP 7.3 进行测试。我正在使用 Git Bash 来运行和测试我的 shell 命令。
我当前的 FileController 包含许多方法,包括“创建”和“下载”。
“创建”只是将文件存储到 Laravel 的存储目录中,并在数据库中创建一个新的“文件”资源,而“下载”则尝试检索加密文件,解密并将其发送到客户端。
这是我的创建方法。它只是创建资源并存储带有“.decrypted”前缀扩展名的文件。(我留了很多空白,因为这个方法的逻辑不是关于加密的)
//App\Http\Controllers\Files\FileController.php
public function create(Request $request)
{
...
$file = File::create([
'name' => $name,
'uuid' => $uuid,
...
]);
...
$output->move($userPath, $uuid.'.decrypted');
...
return new FileResource($file);
}
Run Code Online (Sandbox Code Playgroud)
然后,这是我编写的用于每分钟加密后缀文件的 BASH 脚本(我用一些“###”替换了敏感信息,不用担心。)
#encrypt.sh
#!/bin/bash
set -euo pipefail …Run Code Online (Sandbox Code Playgroud)