谷歌云可恢复的PHP上传-它与常规上传在程序上有什么不同



我有一个谷歌云上传功能,它可以很好地处理我上传的相对较小的文件(请参阅下面的代码(。但我很快就需要上传500Meg大小的文件;可恢复的";上传选项。在谷歌文档上,它基本上说文件超过5Meg,谷歌只是将上传转换为可恢复的上传类型。但这意味着什么?这是否意味着我不需要做任何编码更改?这是否意味着,如果我的页面超时,我重新输入页面并再次开始下载,Google API将自动检测到上一次上传失败,只会在停止的地方继续上传,然后在上传完成后只向我返回一个有效的(非NULL(storageObject?

这是我现在的";"不可恢复";代码:

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);
$sFileHash = base64_encode(md5($fileContent,true)); 
$storageObject = $bucket->upload(
$fileContent,
[
'name' => $cloudPath,
'metadata' => ['md5Hash' => $sFileHash]
]
);
return $storageObject; // will be null on failure
}

upload()getResumableUploader()之间的差异中,我们可以看到非常奇怪的文档。根据云客户端库上的文档,上传功能状态为:

以简单的方式上传您的数据。上传将默认为如果文件大小大于5mb,则可恢复。

正如云存储文档所述:

可恢复的上传是代表您自动管理的,但可以使用可恢复选项直接控制。

这意味着使用当前代码,您可以通过添加'resumable' => true在代码中启用upload()的可恢复选项。虽然我不太确定,但可能有一些幕后的东西没有看到,文件也没有解释清楚。这个例子看起来像:

$storageObject = $bucket->upload(
$fileContent,
[
'name' => $cloudPath,
'metadata' => ['md5Hash' => $sFileHash],
'resumable' => true
]
);

我在github上查看了这两种方法的源代码,它们实际上有相同的配置选项,但getresumableUpload()包含resume()所必需的getResumeUri(),我似乎找不到与普通upload()的兼容性,尽管我不排除这种可能性。

$uploader = $bucket->getResumableUploader(
fopen($fileContent, 'r'),
[
'name' => $cloudPath,
'metadata' => ['md5Hash' => $sFileHash]
]
);
try {
$object = $uploader->upload();
} catch (GoogleException $ex) {
//if there is an error it can automatically restart
//$uploader contains 'resumeUri' which is what is used to resume the upload
$resumeUri = $uploader->getResumeUri();
$object = $uploader->resume($resumeUri);
}

resume()处理为恢复上载而发送的所有必要的标头和字节。

您所描述的案例应该是可恢复的。

以下所有HTTP状态响应都被认为是可重试的:

  • 408请求超时
  • 500内部服务器错误
  • 502坏网关
  • 503服务不可用
  • 504网关超时

以下HTTP状态响应是不可重试的:

  • 404未找到
  • 410消失

有关HTTP状态的更多信息,请点击此处

相关内容

最新更新