私が使用していたリモートサービスがあり、これはBase64でエンコードされたPDFを返します。次のように私はこれを使用していた:これはダウンロードして、私はメモリ内のファイル全体をロードすることなく、ユーザーにそれへのリンクを与えることができる公共のディスク上のPDFファイルを書き込むために使用された応答フィルターに変換フィルターを追加
$fp = fopen($url, "r");
$fn = md5($url).".pdf";
stream_filter_append($fp, 'convert.base64-decode');
\Storage::drive("public")->put($fn,$fp);
return response()->json(["url"=>\Storage::drive("public")->url($fn)]);
。ここでの問題は、ファイルが大きいことです(50MBのPDFはbase64でそれほど大きくなりません)。
リモートサーバーがfopen
が処理できない内部リダイレクトを追加するまで、これはうまくいきました。 内部リダイレクトを処理する独自のソリューションを作成するのではなく、コードをGuzzleに移行することにしました。
これは私が試したものです:
$client = new Client();
$res = $client->request("GET", $url);
$fp = $res->getBody();
$fn = md5($url).".pdf";
stream_filter_append($fp, 'convert.base64-decode'); //Works without this
\Storage::drive("public")->put($fn,$fp);
return response()->json(["url"=>\Storage::drive("public")->url($fn)]);
問題は、コードがそれなしで正常に動作し、stream_filter_append
です。私が手にエラーが
は、stream_filter_append()は、パラメータ1がリソースであることを期待され、オブジェクトが
がつがつ食う応答の身体上のストリームフィルタを追加する方法はあり
を与えられましたか?