我有一个谷歌云上传功能,它可以很好地处理我上传的相对较小的文件(请参阅下面的代码(。但我很快就需要上传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状态的更多信息,请点击此处