#php #laravel #http
Вопрос:
Отправляет запрос post другому api внутри контроллера Laravel. Он возвращает файл .pdf в качестве ответа. Я хочу сохранить этот файл в хранилище. Я получаю исключение FileNotFound.
Вот код
public function cvToPDF(Request $request)
{
$response = Http::withHeaders(['Content-Type' => 'application/pdf'])
->withToken(Request()->bearerToken())
->post('http://some-endpoint', $request->all());
Storage::disk('s3')->putFile('drive/files', $response);
return $response;
}
возврат $ответ работает на стороне клиента. Я могу загрузить PDF-файл с этой конечной точкой. Но Storage::диск вызывает исключение.
Комментарии:
1.
PutFile
принимаетIlluminateHttpFile
либоIlluminateHttpUploadedFile
экземпляр или в качестве второго аргумента , убедитесь, что это так, вместо загрузки вы должны хранить на диске, а затем указать путь во втором аргументе2. какое исключение это вызывает?
3. @Прадип, я знаю. И я пытаюсь преобразовать этот ответ в экземпляр файла IlluminateHttp. Вы можете мне в этом помочь? Я пробовал $file = новый файл($response); Но не сработало.
4. Ошибка: Вызов неопределенного метода ОсветитьПоддержкаФасадыФайл::hashName()
Ответ №1:
Потому что вы пытаетесь сохранить ответ, а не файл.
Обходной путь в методе sink () — это МОЖЕТ сработать.
public function cvToPDF(Request $request)
{
$tempName = tempnam(sys_get_temp_dir(), 'response').'.pdf';
$response = Http::sink($tempName)
->withHeaders(['Content-Type' => 'application/pdf'])
->withToken(Request()->bearerToken())
->post('http://some-endpoint', $request->all());
Storage::disk('s3')->putFile('drive/files', new File($tempName));
return $response;
}
Ответ №2:
Вместо загрузки вы должны сохранить pdf
в каталоге, после чего использовать что-то вроде этого :
Storage::disk('s3')->putFile('drive/files', new File('/path/to/pdf'));
Для получения дополнительной информации : https://laravel.com/docs/8.x/filesystem#storing-files
Комментарии:
1. $tmp_path = sys_get_temp_dir(); $tmp_name = $tmp_path . ‘/’ . auth(‘api’)->пользователь()->>идентификатор.’. pdf’; содержимое файла($tmp_name, $ответ); Хранилище::диск(«s3»)->>>Файл(«диск/файлы», новый файл($ответ)); добавлены эти строки после запроса. Но происходит та же ошибка.
2. Но главный вопрос — как сохранить файл из ответа 🙂