0

Я пытаюсь загрузить видео/изображение с помощью опции google api resumable upload.Проблема с загрузкой изображений/видео Picasa

Если у меня есть файл размером 200 МБ, мне нужно сделать кусок загрузки N раз. Мой код возвращает код состояния 308 для N-1 раз (кроме последнего). Для последнего chunk google не отвечает на меня (Мой php-сервер говорит «empty-reply-from-server»)

Пожалуйста, помогите мне, где я ошибаюсь.

global $access_token; 
$title = basename($videoPath); 
$mimeType = mime_content_type($videoPath); 
$content_length = getSize($videoPath); 
$curl = new Curl(); 
$curl->setHeader("Host", "picasaweb.google.com"); 
$curl->setHeader("Content-Length", 0); 
$curl->setHeader("X-upload-content-length", $content_length); 
$curl->setHeader("X-upload-content-type", $mimeType); 
$curl->setHeader("Slug", $title); 
$curl->setHeader("Authorization", "Bearer $access_token"); 
$curl->setHeader("Content-Type", 'application/atom+xml'); 
$curl->setHeader("User-Agent", "CXchange-CXchange-1.0 cURL/1.11.3"); 
$curl->setHeader("Accept-encoding", "identity"); 
$curl->setHeader("GData-Version", "2"); 
$curl->setHeader("MIME-version", "1.0"); 
try { 
    //Get the resumable uri 
    $url = "https://picasaweb.google.com/data/upload/resumable/media/create-session/feed/api/user/default/albumid/$id"; 
    $responce = $curl->post($url); 
    $responce_code = $curl->http_status_code; 
    if ($responce_code == 200) { 
     $headers = $curl->response_headers; 
     foreach ($headers as $header) { 
      if (strstr($header, "Location")) { 
       echo $uri = str_replace("Location:", "", $header); 
       break; 
      } 
     } 
    } else { 
     echo "Upload faild"; 
    } 

    $cnt = 0; 
    $chunk_size = 256 * 1024 * 1; 
    $handle = fopen($videoPath, 'rb'); 
    if ($handle === false) { 
     return false; 
    } 
    $progress = 0; 
    while (!feof($handle)) { 
     $buffer = fread($handle, $chunk_size); 
     $cnt = strlen($buffer); 
     $lastBytePos = $progress + $cnt - 1; 
     $curl = new Curl(); 
     $curl->setHeader("Host", "picasaweb.google.com"); 
     $curl->setHeader("Content-Length", $chunk_size); 
     $curl->setHeader("Authorization", "Bearer $access_token"); 
     $curl->setHeader("Content-Type", $mimeType); 
     $curl->setHeader("User-Agent", "CXchange-CXchange-1.0 cURL/1.11.3"); 
     $curl->setHeader("Accept-encoding", "identity"); 
     $curl->setHeader("Content-Range", "bytes $progress-$lastBytePos/$content_length"); 
     $curl->setHeader("GData-Version", "2"); 
     $curl->setHeader("MIME-version", "1.0"); 
     $curl->setHeader("Expect", ""); 

     $responce = $curl->put(trim($uri), $buffer); 
     $responce_code = $curl->http_status_code; 
     if ($responce_code == 308) { 
      $headers = $curl->response_headers; 
      foreach ($headers as $header) { 
       if (strstr($header, "Range:")) { 
        $temp = explode("-", $header); 
        $progress = end($temp)+1; 
        break; 
       } 
      } 
     } else { 
      echo "Upload faild"; 
     } 
    } 
    fclose($handle); 
} catch (Exception $e) { 
    echo ''; 
} 
+0

Вы пытались отправить другой файл (возможно, файл меньшего размера)? – Rivero

ответ

0

код: 400 тзд: Преждевременный конец файла.

После прочтения этой темы I found the solution должен дать что-то для первого запроса сессии. Вы просто не можете оставить его без тела.

$xmldata = 
'<entry xmlns="http://www.w3.org/2005/Atom"> 
    <title>cats.jpg</title> 
    <summary>Real cat wants attention too.</summary> 
    <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/photos/2007#photo"/> 
</entry>'; 
$request = new Google_Http_Request(
    "https://picasaweb.google.com/data/upload/resumable/media/create-session/feed/api/user/{$person->id}/albumid/6185252512807301377?alt=json&access_token=" .$token['access_token'], 
    "POST", 
    array('GData-Version' => 2, 
     'Content-Type' => 'application/atom+xml', 
     'MIME-Version' => '1.0', 
     'Content-Length' => strlen($xmldata), 
     'X-Upload-Content-Length' => $size, 
     'X-Upload-Content-Type' => 'image/jpeg', 
     'Slug' => 'xxxx.jpg', 
     'Authorization' => "Bearer {$token['access_token']}"), 
     $xmldata 
); 
$response = Google_Http_REST::doExecuteRaw($client, $request); 

заголовка Slug требуется, но имя файла будет cats.jpg (XML).

 Смежные вопросы

  • Нет связанных вопросов^_^