如何恢复崩溃的上传?
How do I resume a crashed upload?
注意:此问题被标记为可能与 13413036 重复。
事实并非如此,在那个问题中,他们询问如何使用可恢复上传来上传文件。
这段代码正是这样做的,并且有效。唯一的问题是库在长时间后崩溃。
我正在尝试将一个 40GB 的文件从云计算实例上传到云端硬盘。
我在命令行有一个 PHP 脚本 运行,它在大约一个小时后崩溃了。
PHP Fatal error: Uncaught exception 'Google_Service_Exception' with message 'Error calling PUT https://www.goog
leapis.com/upload/drive/v2/files?uploadType=resumable&upload_id=AEnB2UrkY_dh7-GmPp33joiPzhBT3DHY6fg4bgN_PNWVgEYg
IBZmFf0UceJbLS1XeyaJ0bFxdMTNWtPVEAQKIf8uE7HBExuG6g: (503) Service Unavailable' in /var/www/backend/phpsdk/exampl
es/apiClient/src/Google/Http/REST.php:110
Stack trace:
#0 /var/www/backend/phpsdk/examples/apiClient/src/Google/Http/MediaFileUpload.php(183): Google_Http_REST::decode
HttpResponse(Object(Google_Http_Request), Object(Google_Client))
#1 /var/www/backend/phpsdk/examples/drive.php(95): Google_Http_MediaFileUpload->nextChunk('\xBA\x9AX\xBA\xAB\x9C
C\x91\x9E1\xDB|\xD0\xD5\xFB...')
#2 {main}
thrown in /var/www/backend/phpsdk/examples/apiClient/src/Google/Http/REST.php on line 110
如果我再次执行该脚本,它会在 Drive 中创建一个新文件。
崩溃后如何恢复初始上传?
我可以在初始化 Google_Http_MediaFileUpload 后设置 resumeUri 吗?
如何让 PHP 跳过读取文件到特定点?
示例中的代码是copy/paste:
// Create a media file upload to represent our upload process.
$media = new Google_Http_MediaFileUpload(
$client,
$request,
mime_content_type(TESTFILE),
null,
true,
$chunkSizeBytes
);
$media->setFileSize(filesize(TESTFILE));
// Upload the various chunks. $status will be false until the process is
// complete.
$status = false;
$handle = fopen(TESTFILE, "rb");
while (!$status && !feof($handle)) {
$chunk = fread($handle, $chunkSizeBytes);
$status = $media->nextChunk($chunk);
}
// The final value of $status will be the data from the API for the object
// that has been uploaded.
$result = false;
if ($status != false) {
$result = $status;
}
fclose($handle);
}
这不是重复,这是一个合法的错误。我有同样的问题并尝试在 github 中发帖,主要开发人员说要对 nextChunk 事物进行 try catch 以查看是否可以在捕获到异常后恢复它。到目前为止我停止了该模块的开发,但我认为 try/catch 可能会解决它,除非 API 是为了防止上传大文件。我的是 17 GB,我在它停止之前达到了 12 GB,并不总是在小时标记处停止,尽管它也在小时标记处停止。想发表评论,但还没有足够的代表。
最后,我通过发送更大的块来修复它,因为我有可用的 RAM,我将 chunkSize 设置为 20 * 1024 * 1024 并在 40 分钟左右上传。
服务器有 12GB 内存。并且迁移在 Google 网络内。云计算实例和 Google 驱动器。但是,速度仅为 22MBps 左右
注意:此问题被标记为可能与 13413036 重复。 事实并非如此,在那个问题中,他们询问如何使用可恢复上传来上传文件。 这段代码正是这样做的,并且有效。唯一的问题是库在长时间后崩溃。
我正在尝试将一个 40GB 的文件从云计算实例上传到云端硬盘。
我在命令行有一个 PHP 脚本 运行,它在大约一个小时后崩溃了。
PHP Fatal error: Uncaught exception 'Google_Service_Exception' with message 'Error calling PUT https://www.goog
leapis.com/upload/drive/v2/files?uploadType=resumable&upload_id=AEnB2UrkY_dh7-GmPp33joiPzhBT3DHY6fg4bgN_PNWVgEYg
IBZmFf0UceJbLS1XeyaJ0bFxdMTNWtPVEAQKIf8uE7HBExuG6g: (503) Service Unavailable' in /var/www/backend/phpsdk/exampl
es/apiClient/src/Google/Http/REST.php:110
Stack trace:
#0 /var/www/backend/phpsdk/examples/apiClient/src/Google/Http/MediaFileUpload.php(183): Google_Http_REST::decode
HttpResponse(Object(Google_Http_Request), Object(Google_Client))
#1 /var/www/backend/phpsdk/examples/drive.php(95): Google_Http_MediaFileUpload->nextChunk('\xBA\x9AX\xBA\xAB\x9C
C\x91\x9E1\xDB|\xD0\xD5\xFB...')
#2 {main}
thrown in /var/www/backend/phpsdk/examples/apiClient/src/Google/Http/REST.php on line 110
如果我再次执行该脚本,它会在 Drive 中创建一个新文件。
崩溃后如何恢复初始上传? 我可以在初始化 Google_Http_MediaFileUpload 后设置 resumeUri 吗? 如何让 PHP 跳过读取文件到特定点?
示例中的代码是copy/paste:
// Create a media file upload to represent our upload process.
$media = new Google_Http_MediaFileUpload(
$client,
$request,
mime_content_type(TESTFILE),
null,
true,
$chunkSizeBytes
);
$media->setFileSize(filesize(TESTFILE));
// Upload the various chunks. $status will be false until the process is
// complete.
$status = false;
$handle = fopen(TESTFILE, "rb");
while (!$status && !feof($handle)) {
$chunk = fread($handle, $chunkSizeBytes);
$status = $media->nextChunk($chunk);
}
// The final value of $status will be the data from the API for the object
// that has been uploaded.
$result = false;
if ($status != false) {
$result = $status;
}
fclose($handle);
}
这不是重复,这是一个合法的错误。我有同样的问题并尝试在 github 中发帖,主要开发人员说要对 nextChunk 事物进行 try catch 以查看是否可以在捕获到异常后恢复它。到目前为止我停止了该模块的开发,但我认为 try/catch 可能会解决它,除非 API 是为了防止上传大文件。我的是 17 GB,我在它停止之前达到了 12 GB,并不总是在小时标记处停止,尽管它也在小时标记处停止。想发表评论,但还没有足够的代表。
最后,我通过发送更大的块来修复它,因为我有可用的 RAM,我将 chunkSize 设置为 20 * 1024 * 1024 并在 40 分钟左右上传。
服务器有 12GB 内存。并且迁移在 Google 网络内。云计算实例和 Google 驱动器。但是,速度仅为 22MBps 左右