如何在上传到 Google 云之前使用 PHP 计算文件的 MD5

How to calculate MD5 for a file using PHP before uploading to Google Cloud

我正在使用 https://zatackcoder.com/upload-file-to-google-cloud-storage-using-php/ 中的代码示例将文件上传到 Google 云。一切正常(我是新手,所以我很高兴拥有它 运行!),但我最近读了一个简介,您可以在其中告诉 Google Cloud 您的文件的 md5 是什么正在上传,Google 将根据实际上传进行验证,如果存在导致不同 md5 的传输问题,上传将失败。

我的问题分为两部分:

  1. 如何计算Google云可以理解的格式的md5?我相信计算实际上是从 PHP 的 file_md5() 返回的 md5 的 base64_encode() 但是当我这样做时,结果字符串实际上与结果有很大不同“md5Hash”:从 Google 返回的“TPmaCjp5uh1jxIQahhOAsQ==”。我正在使用 Google Cloud STORAGE API 执行上传(参见上面的 link 和下面的次要代码片段)。

  2. 正确计算 md5Hash 后,如何在 upload() 函数中指定该值作为上传的一部分传递?有没有人这样做过并可以分享他们的专业知识?

非常感谢!

这是上面 link 中较大项目的片段。上传工作正常,我只是在寻找如何生成适当的 md5Hash 并将该哈希包含在上传中。

function uploadFile($bucketName, $fileContent, $cloudPath) {
    $privateKeyFileContent = $GLOBALS['privateKeyFileContent'];
    // connect to Google Cloud Storage using private key as authentication
    try {
        $storage = new StorageClient([
            'keyFile' => json_decode($privateKeyFileContent, true)
        ]);
    } catch (Exception $e) {
        // maybe invalid private key ?
        print $e;
        return false;
    }

    // set which bucket to work in
    $bucket = $storage->bucket($bucketName);

    // upload/replace file 
    $storageObject = $bucket->upload(
            $fileContent,
            ['name' => $cloudPath]
            // if $cloudPath is existed then will be overwrite without confirmation
            // NOTE: 
            // a. do not put prefix '/', '/' is a separate folder name  !!
            // b. private key MUST have 'storage.objects.delete' permission if want to replace file !
    );

    // is it succeed ?
    return $storageObject != null;
}

根据 PHP client library for Cloud Storage documentation, in the upload methodStorageObject 对象,您可以指定一个 metadata 参数。

这个参数是一个数组,可以让你传递md5Hash。 here.

列出了您可以传递的完整属性列表