如何在上传到 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 的传输问题,上传将失败。
我的问题分为两部分:
如何计算Google云可以理解的格式的md5?我相信计算实际上是从 PHP 的 file_md5() 返回的 md5 的 base64_encode() 但是当我这样做时,结果字符串实际上与结果有很大不同“md5Hash”:从 Google 返回的“TPmaCjp5uh1jxIQahhOAsQ==”。我正在使用 Google Cloud STORAGE API 执行上传(参见上面的 link 和下面的次要代码片段)。
正确计算 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
method 的 StorageObject
对象,您可以指定一个 metadata
参数。
这个参数是一个数组,可以让你传递md5Hash。 here.
列出了您可以传递的完整属性列表
我正在使用 https://zatackcoder.com/upload-file-to-google-cloud-storage-using-php/ 中的代码示例将文件上传到 Google 云。一切正常(我是新手,所以我很高兴拥有它 运行!),但我最近读了一个简介,您可以在其中告诉 Google Cloud 您的文件的 md5 是什么正在上传,Google 将根据实际上传进行验证,如果存在导致不同 md5 的传输问题,上传将失败。
我的问题分为两部分:
如何计算Google云可以理解的格式的md5?我相信计算实际上是从 PHP 的 file_md5() 返回的 md5 的 base64_encode() 但是当我这样做时,结果字符串实际上与结果有很大不同“md5Hash”:从 Google 返回的“TPmaCjp5uh1jxIQahhOAsQ==”。我正在使用 Google Cloud STORAGE API 执行上传(参见上面的 link 和下面的次要代码片段)。
正确计算 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
method 的 StorageObject
对象,您可以指定一个 metadata
参数。
这个参数是一个数组,可以让你传递md5Hash。 here.
列出了您可以传递的完整属性列表