使用 mpdf 库在 Google Cloud Storage 上上传 PDF 文件

Posted

技术标签:

【中文标题】使用 mpdf 库在 Google Cloud Storage 上上传 PDF 文件【英文标题】:Upload PDF file on Google Cloud Storage with mpdf library 【发布时间】:2018-08-09 11:22:39 【问题描述】:

我正在使用 mpdf 库将 html 转换为 PDF,并成功地将我的 pdf 文件存储在本地和远程服务器上。但我不想将我的 pdf 文件存储在服务器上的代码仓库中,而是想利用谷歌云上可用的存储桶。

/*
    */
    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文件夹中,但我想直接将它存储到谷歌云存储桶中。

我对谷歌云和 mpdf 库没有太多经验,因此寻求帮助和指导来实现这些功能。

请帮帮我。

【问题讨论】:

【参考方案1】:

我看到你在 php 中使用 Cloud Storage Client Libraries。

首先,你需要将它安装到你的机器上:

composer require google/cloud-storage

然后你需要按照指南set up authentication。

一旦将这些设置为create a bucket 以存储 PDF。

然后将您的上传功能替换为documentation中的代码:

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);

【讨论】:

【参考方案2】:

我也遇到了同样的问题并提出了this solution,希望对您有所帮助。 使用 'S' 而不是 'F' 参数,因此它将返回字符串数据并将此数据直接传递给上传方法。

【讨论】:

以上是关于使用 mpdf 库在 Google Cloud Storage 上上传 PDF 文件的主要内容,如果未能解决你的问题,请参考以下文章

mPDF 从另一个文档导入页面

使用 Python,将 google.cloud.bigquery.job.query.QueryJob 输出保存到本地 JSON 文件

mpdf 扩展中的分页符:Yii

将 Nuxt JS s-s-r 应用程序部署到 Google Cloud App Engine 标准

如何从 Cloud Functions 连接 Google Cloud SQL?

无法在mPDF 7中注册自定义字体