2016-03-03 61 views
3

我試圖上傳使用的V3谷歌硬碟SDK文件到谷歌驅動器:無法更新谷歌驅動器文件

$this->drive() 
    ->files 
    ->update(
     $this->report->getId(), 
     $this->report, // This is a Google_Service_Drive_DriveFile instance 
     [ 
      'uploadType' => 'multipart', 
      'data' => file_get_contents($this->getLocalReportLocation()) 
     ] 
    ); 

我收到以下異常:

調用PATCH https://www.googleapis.com/upload/drive/v3/files/ABCDe4FGHvXZTKVOSkVETjktNE0?uploadType=multipart時出錯:(403)資源體包含不可直接寫入的字段。

+0

如果你只是刪除了'data'額外的參數? –

+0

同樣的問題,所以我想這不是導致它的'data'參數。將編輯該問題。 – siannone

+0

另外,'update'方法的簽名是什麼? –

回答

1

顯然,問題是由$this->report造成的,我通過以下方式獲得:

// Fetch the latest synchronized report 
$latestReport = $this->drive() 
    ->files 
    ->listFiles([ 
     'orderBy' => 'modifiedTime', 
     'q'  => '\''.$this->userEmail.'\' in owners AND name contains \'AppName\'', 
    ]) 
    ->getFiles()[0]; 

$this->report = $this->drive() 
    ->files 
    ->get($latestReport->id); 

大概$this->report,這是\Google_Service_Drive_DriveFile一個實例,包含一些字段設置並傳遞到時所造成的問題update()方法。

我能夠通過傳遞\Google_Service_Drive_DriveFile一個新實例到update()方法這樣解決問題:

$this->drive() 
    ->files 
    ->update($this->report->getId(), (new \Google_Service_Drive_DriveFile()), [ 
     'uploadType' => 'multipart', 
     'data' => file_get_contents($this->getLocalReportLocation()), 
     'mimeType' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' 
    ]); 
相關問題