code: function chunkedUploadStart($data)
      {
          Checker::argString("data", $data);
  
          $response = $this->_chunkedUpload(array(), $data);
  
          if ($response->statusCode === 404) {
              throw new Exception_BadResponse("Got a 404, but we didn't send up an 'upload_id'");
          }
  
          $correction = self::_chunkedUploadCheckForOffsetCorrection($response);
          if ($correction !== null) throw new Exception_BadResponse(
              "Got an offset-correcting 400 response, but we didn't send an offset");
  
          if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
  
          list($uploadId, $byteOffset) = self::_chunkedUploadParse200Response($response->body);
          $len = strlen($data);
          if ($byteOffset !== $len) throw new Exception_BadResponse(
              "We sent $len bytes, but server returned an offset of $byteOffset");
  
          return $uploadId;
      }
docs: Start a new chunked upload session and upload the first chunk of data.
  
  @param string $data
  The data to start off the chunked upload session.
  
  @return array
  A pair of `(string $uploadId, int $byteOffset)`.  `$uploadId`
  is a unique identifier for this chunked upload session.  You pass this in to
  {@link chunkedUploadContinue} and {@link chuunkedUploadFinish}.  `$byteOffset`
  is the number of bytes that were successfully uploaded.
  
  @throws Exception