Я использую библиотеку mpdf для преобразования HTML в PDF и успешно сохранил свой файл pdf как на локальном, так и на удаленном сервере. Но я не хочу хранить свои файлы pdf в репозиториях кода на сервере и предпочитаю использовать ведро хранилища, доступное в облаке Google.
/*
*/
private function generatePDF($params, $quotationId) {
$location = '/var/www/html/development/pdfs/';
$html = $this->load->view('quotation', $data, TRUE);
$filename = "quo_" .time() . ".pdf";
$mpdf = new \Mpdf\Mpdf(['mode' => 'en-IN', 'format' => 'A4']);
$mpdf->WriteHTML($html);
$mpdf->SetHTMLFooter('<p style = "text-align: center; text-size: 12px;">This is computer generated quotation. It does not require signature.</p>');
$pdf = $mpdf->Output($location . $filename, 'F');
$this->UploadModel->upload($pdf, $filename);
}
public function upload($pdf, $pdfName) {
$storage = new StorageClient();
$bucket = $storage->bucket("bucketname");
$object = $bucket->upload($pdf, ['name' => $pdfName]);
$object = $bucket->object($pdfName);
$object->update(['acl' => []], ['predefinedAcl' => 'PUBLICREAD']);
}
Здесь я использовал тип F, в котором он сохраняет файл pdf в папке pdfs, созданной в моем репозитории кода, размещенном на облачном сервере, но я хотел бы напрямую сохранить его в ведре облачного хранилища Google.
У меня нет большого опыта работы с облаком Google и библиотекой mpdf, поэтому мне нужна помощь и руководство для достижения этой функциональности.
Пожалуйста, помогите мне.






Я вижу, вы используете Клиентские библиотеки облачного хранилища для PHP.
Во-первых, вам нужно установить его на свой компьютер:
composer require google/cloud-storage
И затем вам нужно настроить аутентификацию, следуя руководству.
Как только они будут установлены, создать ведро для хранения PDF-файлов.
Затем замените свою функцию загрузки кодом из документация:
use Google\Cloud\Storage\StorageClient;
/**
* Upload a file.
*
* @param string $bucketName the name of your Google Cloud bucket.
* @param string $objectName the name of the object.
* @param string $source the path to the file to upload.
*
* @return Psr\Http\Message\StreamInterface
*/
function upload_object($bucketName, $objectName, $source)
{
$storage = new StorageClient();
$file = fopen($source, 'r');
$bucket = $storage->bucket($bucketName);
$object = $bucket->upload($file, [
'name' => $objectName
]);
printf('Uploaded %s to gs://%s/%s' . PHP_EOL, basename($source), $bucketName, $objectName);
}
Я также столкнулся с той же проблемой и вышел с это решение, надеюсь, это поможет вам. используйте 'S' вместо параметра 'F', чтобы он возвращал строковые данные и передавал эти данные непосредственно в метод загрузки.