代码之家  ›  专栏  ›  技术社区  ›  SegFaultDev

如何在Laravel中使用Response->download()下载文件后删除文件

  •  4
  • SegFaultDev  · 技术社区  · 7 年前

    我使用fputcsv()生成了一个CSV文件,然后从控制器返回下载的文件。它通过浏览器成功下载,但我还想在下载后删除文件。

    //controller class
    public function downloadCSV{
    ...
        return response()->download($filePath, $fileName, $headers);
    }
    

    如何调用我的delete函数。

    //controller class
    csvService->deleteCSV($fileName);
    
    //csvService class
    public function deleteCSV($filename) {
        if (File::exists(storage_path($filename))) {
              File::delete(storage_path($filename));
        }
    }
    

    我尝试了以下方法。文件未下载,但已成功删除。

    public function downloadCSV(...)
        ...
        response()->download($filePath, $fileName, $headers);
    
        return $csvService->deleteCSV($fileName);
    }
    
    1 回复  |  直到 7 年前
        1
  •  4
  •   Brian Lee    7 年前

    使用 deleteFileAfterSend 方法:

    return response()->download($filePath, $fileName, $headers)->deleteFileAfterSend(true);
    

    File Download and Responses

    //controller class
    public function downloadAndDeleteCSV{
        ...
        return response()->download($filePath, $fileName, $headers)->deleteFileAfterSend(true);
    }