gpt4 book ai didi

php - 在 Laravel 中处理加密文件(如何下载解密文件)

转载 作者:可可西里 更新时间:2023-11-01 13:39:55 24 4
gpt4 key购买 nike

在我的webapp中,用户可以上传文件。在保存和存储之前,文件的内容使用如下方式加密:

Crypt::encrypt(file_get_contents($file->getRealPath()));

然后我使用Laravel自带的文件系统来移动文件

Storage::put($filePath, $encryptedFile);

我有一个表来存储有关每个文件的信息,其中包含以下列:

  • 编号
  • 文件路径
  • 文件名
  • original_name(包括扩展名)

现在我希望用户能够下载这个加密文件。但是,我无法解密文件并将其返回给用户。在file downloads response section在 Laravel 文档中,它建议这样做:

return response()->download($pathToFile, $name, $headers);

它想要一个很好的文件路径,但我可以在什么时候解密文件内容以便它实际上是可读的?

我似乎可以做到这一点:

$encryptedContents = Storage::get($fileRecord->file_path);
$decryptedContents = Crypt::decrypt($encryptedContents);

...但我不知道如何将其作为具有指定文件名的下载返回。

最佳答案

您可以像这样手动创建响应:

$encryptedContents = Storage::get($fileRecord->file_path);
$decryptedContents = Crypt::decrypt($encryptedContents);

return response()->make($decryptedContents, 200, array(
'Content-Type' => (new finfo(FILEINFO_MIME))->buffer($decryptedContents),
'Content-Disposition' => 'attachment; filename="' . pathinfo($fileRecord->file_path, PATHINFO_BASENAME) . '"'
));

您可以查看 Laravel API有关 make 方法的参数的更多信息。 pathinfo函数还用于从路径中提取文件名,以便它在响应中发送正确的文件名。

关于php - 在 Laravel 中处理加密文件(如何下载解密文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34624118/

24 4 0
文章推荐: php - 如果以后的记录无法添加到 Laravel 5,如何回滚新记录?
文章推荐: javascript - 根据文本输入的值添加