【问题标题】:Resumable upload with Google drive with php使用 php 使用 Google 驱动器恢复上传
【发布时间】:2016-06-08 08:50:20
【问题描述】:

我正在尝试使用 Google Drive 在 php 中进行可恢复上传,使用此文档:https://developers.google.com/drive/v3/web/manage-uploads#resumable

我需要在没有 sdk 的情况下这样做。

我已经管理了一个简单的上传,但是当我尝试开始一个可恢复的会话时,我的 cURL 没有返回任何内容。

这是我的 cURL 的样子:

$curl_header = array(
    'Authorization: Bearer '.$this->_token,
    'X-Upload-Content-Length: '.$total_file_size,
    'X-Upload-Content-Type: '.$mime_type
);

$datas = array();

$url_upload = 'https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable';

$curl_default_options = array(
    // Default option (http://php.net/manual/fr/function.curl-setopt.php)
    CURLOPT_HTTPHEADER => $curl_header,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_SSL_VERIFYHOST => 2,
    CURLOPT_SSL_VERIFYPEER => true,
    CURLOPT_CAINFO => $path_cert.'/googledrive/certificat.pem',
    CURLOPT_URL        => $url_upload,
    CURLOPT_POST       => true,
    CURLOPT_POSTFIELDS => $datas
);

$curl = curl_init();

curl_setopt_array($curl, $curl_default_options);

if (count($curl_more_options)) {
    curl_setopt_array($curl, $curl_more_options);
}

我做了一个“curl_getinfo($curl)”并得到了:

Array ( 
    [url] => https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable 
    [content_type] => text/html; charset=UTF-8 
    [http_code] => 200 
    [header_size] => 699 
    [request_size] => 288 
    [filetime] => -1 
    [ssl_verify_result] => 0 
    [redirect_count] => 0 
    [total_time] => 0.203 
    [namelookup_time] => 0 
    [connect_time] => 0.016 
    [pretransfer_time] => 0.047 
    [size_upload] => 0 
    [size_download] => 0 
    [speed_download] => 0 
    [speed_upload] => 0 
    [download_content_length] => 0 
    [upload_content_length] => -1 
    [starttransfer_time] => 0.203 
    [redirect_time] => 0 
    [redirect_url] => 
    [primary_ip] => 216.58.208.202 
    [certinfo] => Array ( ) 
    [primary_port] => 443 
    [local_ip] => 192.168.0.44 
    [local_port] => 56440 
)

【问题讨论】:

  • 你解决过这个问题吗?

标签: php curl google-drive-api


【解决方案1】:

好久不见,但一定是这样的:

  • 第一部分上传:

    $curl_headers = array(
        'Content-Type: application/json',
        'X-Upload-Content-Length: '.$total_file_size,
        'X-Upload-Content-Type: '.$mime_type
    );
    
    $datas = '{
        "name": "'.$name.'",
        "parents": ["'.$id_file_destination.'"]
     }';
    
    $url = 'https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable';
    
    $curl_default_options = array(
        CURLOPT_HTTPHEADER     => $curl_headers,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYHOST => 2,
        CURLOPT_SSL_VERIFYPEER => true,
        CURLOPT_CAINFO         => $path_cert.'/certificat.pem',
        CURLOPT_URL            => $url,
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => $datas,
        CURLOPT_HEADER         => true
    );
    

您将收到一个可用于恢复上传的会话:

  • 可恢复上传:

    $header = array(
        'Content-Length: '.$content_length,
        'Content-Type: '.$mime_type,
        'Content-Range: bytes '.$byte_start.'-'.$byte_end.'/'.$total_file_size,
    );
    
    $datas = fread($file, $content_length);
    
    $url = $session;
    
    $curl_default_options = array(
        CURLOPT_HTTPHEADER     => $header,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYHOST => 2,
        CURLOPT_SSL_VERIFYPEER => true,
        CURLOPT_CAINFO         => $path_cert.'/certificat.pem',
        CURLOPT_URL            => $url,
        CURLOPT_CUSTOMREQUEST  => 'PUT',
        CURLOPT_INFILE         => $file,
        CURLOPT_INFILESIZE     => $total_file_size,
        CURLOPT_POSTFIELDS     => $datas,
        CURLOPT_HEADER         => true,
    );
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-19
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 2014-05-26
    • 1970-01-01
    • 2013-07-28
    相关资源
    最近更新 更多