drbii0359 2016-01-06 01:16
浏览 79
已采纳

使用Laravel中的加密文件(如何下载解密文件)

In my webapp, users can upload files. Before being saved and stored, the contents of the file are encrypted using something like this:

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

I then use the file system that comes with Laravel to move the file

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

I have a table to store information about each file with columns such as:

  • id
  • file_path
  • file_name
  • original_name (includes the extension)

Now I want the user to be able to download this encrypted file. However, I'm having trouble decrypting the file and returning it to the user. In the file downloads response section of the Laravel documentation, it suggests to do this:

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

It wants a file path which is fine, but at which point can I decrypt the file contents so that it is actually readable?

I do seem to be able to do this:

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

... but I don't know how to return it as a download with a specified file name.

  • 写回答

2条回答 默认 最新

  • dongtangjie0495 2016-01-06 01:35
    关注

    You could manually create the response like so:

    $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) . '"'
    ));
    

    You can check out the Laravel API for more info on what the parameters of the make method are. The pathinfo function is also used to extract the filename from the path so it sends the correct filename with the response.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退
  • ¥20 win系统的PYQT程序生成的数据如何放入云服务器阿里云window版?