Datei verschieben Google Drive API V3 PHPPhp

PHP-Programmierer chatten hier
Anonymous
 Datei verschieben Google Drive API V3 PHP

Post by Anonymous »

Verwenden von Google API V3 Ich versuche, eine Datei von einem Ordner in einen anderen zu verschieben. Ich verwende eine Wrapper -Klasse in Laravel, die Datei- und übergeordnete IDs sind korrekt. Entwicklung aus der Dokumentation habe ich Code als: < /p>
ausprobiert

Code: Select all

public function moveFileFromTo($fileID, $toParentID) {
$fromFile = $this->service->files->get($fileID, ['fields' => '*']);
$fromParentID = $fromFile->getParents();
$blankFile = new Google_Service_Drive_DriveFile();
$this->service->files->update($fileID, $blankFile, [
"removeParents" => $fromParentID,
"addParents" => $toParentID
]);
}
< /code>
Dies scheint jedoch die Datei zu verschieben, streift jedoch alle Meta -Daten aus.
Ich habe auch < /p>
ausprobiertpublic function moveFileFromTo($fileID, $toParentID) {
$fromFile = $this->service->files->get($fileID, ['fields' => '*']);
$fromParentID = $fromFile->getParents();
$fromFile->setParents($fromParentID);
$this->service->files->update($fileID, $fromFile);
}
< /code>
Dies gibt jedoch den Fehler an: < /p>
Google\Service\Exception
{ "error": { "errors": [ { "domain": "global", "reason":
"fieldNotWritable", "message": "The resource body includes fields
which are not directly writable." } ], "code": 403, "message": "The
resource body includes fields which are not directly writable." } }
< /code>
Ich möchte einfach die Datei verschieben und alle Metadaten beibehalten. Aus der Dokumentation scheint entweder eine neue leere Datei in der Aktualisierung erforderlich zu sein (wirklich seltsam) oder ich muss die Felder des im zweiten Arguments verwendeten Objekts irgendwie ausziehen ($ from File), an das sie nicht geschrieben werden soll (obwohl ich einfach die Dateien Eltern aktualisiere - was beschreibbar ist). https://issuetracker.google.com/issues/199921300

[b] Probleme mit Antworten bisher: [/b]
, aber dankbar für Antworten 
$fromFile = $this->service->files->get($fileID, ['fields' => 'parents, id']);
Gibt alle ~ 75 -Attribute zurück, von denen viele nicht geschrieben werden können. /> < /p>
Verwendung < /p>

Code: Select all

unset($fromFile->shared);
< /code>
lässt noch andere beschreibbare Attribute < /p>
und in der Tat wird die Datei nicht tatsächlich freigegeben.  Meine Codierung  
public function moveFileFromTo($fileID, $toParentID) {
$fromFile = $this->service->files->get($fileID, ["fields" => "id,parents"]);
$fromFile = $this->getParsedWritableFile($fromFile);
$fromFile->setParents($toParentID);
$this->service->files->update($fileID, $fromFile, ['addParents' => $toParentID]);
}
< /code>
GetParsedWritableFile versucht, nur beschreibbare Attribute auf einem neuen Google Drive -Dateiobjekt festzulegen: < /p>
public function getParsedWritableFile($gdrivefile) {
$gdrivefile = new \Google_Service_Drive_DriveFile();//comment or delete, just here to check auto complete function names

$parsedFile = new \Google_Service_Drive_DriveFile();
//$parsedFile=$gdrivefile;
// currently only allow these according to https://developers.google.com/drive/api/v3/reference/files#resource-representations
$parsedFile->setName($gdrivefile->getName());//name
$parsedFile->setMimeType($gdrivefile->getMimeType());//mimeType
$parsedFile->setDescription($gdrivefile->getDescription());//description
$parsedFile->setStarred($gdrivefile->getStarred());//starred
$parsedFile->setTrashed($gdrivefile->getTrashed());//trashed
$parsedFile->setParents($gdrivefile->getParents());//parents
$parsedFile->setProperties($gdrivefile->getProperties());//properties  [object]
$parsedFile->setAppProperties($gdrivefile->getAppProperties());//appProperties [object]
$parsedFile->setCreatedTime($gdrivefile->getCreatedTime());//createdTime
$parsedFile->setModifiedTime($gdrivefile->getModifiedTime());//modifiedTime
$parsedFile->setWritersCanShare($gdrivefile->getWritersCanShare());//writersCanShare
$parsedFile->setViewedByMeTime($gdrivefile->getViewedByMeTime());//viewedByMeTime
$parsedFile->setFolderColorRgb($gdrivefile->getFolderColorRgb());//folderColorRgb
$parsedFile->setOriginalFilename($gdrivefile->getOriginalFilename());//originalFilename
$parsedFile->setCopyRequiresWriterPermission($gdrivefile->getCopyRequiresWriterPermission());//copyRequiresWriterPermission

/*complex permissions*/
/*
contentHints.thumbnail.image
contentHints.thumbnail.mimeType
contentHints.indexableText
*/
$contenthints=$gdrivefile->getContentHints();//could be null meaning further functions eg getThumbnail cause exception
if($contenthints){
$parsedFile->setContentHints($contenthints->getThumbnail()->getImage());
$parsedFile->setContentHints($contenthints->getThumbnail()->getMimeType());
$parsedFile->setContentHints($contenthints->getIndexableText());
}

/*no function to get indiviual attributes*/
/*
contentRestrictions[].readOnly
ccontentRestrictions[].reason
*/
$parsedFile->setContentRestrictions($gdrivefile->getContentRestrictions());

//
return $parsedFile;
}
Dies ist ein bisschen erfolgreich, aber dies ist originales Meta

Die obigen Code bewegt sich. />

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post