23

GoogleドライブAPIを使用して次のような簡単なタスクを実行しようとしています

  1. フォルダ間でのファイルの移動。
  2. リストアイテム

フォルダを移動します。

私が見つけた限りでは、GoogleドライブAPIはフォルダ間でファイルを移動する方法を提供していません。

/parentおよび/childrenAPIを使用すると、ファイルの親フォルダーを指定できますが、フォルダーに対しては機能しません。さらに、ファイルに関連付けられている親属性は、ファイルをそのフォルダーの下に移動しません。親属性をファイルに関連付けるだけです(これは私の場合はまったく役に立ちません)

4

6 に答える 6

27

ドライブ API V3 には次のようなものがあります。

フォルダ間でファイルを移動する

既存のファイルの親を追加または削除するには、files.update メソッドでaddParentsおよびクエリ パラメータを使用します。removeParents

両方のパラメーターを使用して、あるフォルダーから別のフォルダーにファイルを移動できます: https://developers.google.com/drive/v3/web/folder#inserting_a_file_in_a_folder

于 2016-06-17T12:04:00.607 に答える
11

FILE-A を FOLDER-1 から FOLDER-2 に移動するには、https: //developers.google.com/drive/v2/reference/parents で削除と追加の呼び出しを使用して、FOLDER-1 を親として削除し、追加します。フォルダー-2。

更新された親配列を使用してファイルにパッチを適用することもできます。

于 2012-10-08T10:05:10.927 に答える
4

実際には、Javascript のようにリクエストを設定するだけで、実際には 1 つのステップでそれを行うことができます。

ボディには以下が必要です:

body.parents = [{ 'id': parentId }];

リクエストは次のとおりです。

var request = gapi.client.request({
  'path': 'drive/v2/files/'+fileId,
  'method': 'PUT',
  'params': {'uploadType': 'multipart', 'alt': 'json'}, 
  'headers': { 
    'Authorization': TOKEN
  },
  'body': body
});

そして実行するには:

request.execute(function(resp) { });
于 2014-02-12T16:53:45.040 に答える
2

このサンプル コードでは、Google Drive API v3 を使用しています。

Gfk = Google ファイル キー (ファイルまたはフォルダーのいずれかの ID にすることができます)。

方法:

  • 移動先| ファイル/フォルダーを最初の親フォルダーから指定された宛先フォルダーに移動します。ファイル/フォルダーは、元の最初の親フォルダーから削除されます。
  • addParentsremoveParents | 1 つのみを追加または削除するか、親を移動します。addParentsは元の親を削除せず、追加するだけです。
class Gfiles {
    private $service;

    public function setService(\Google_Client $client) : self {
        $this->service = (new \Google_Service_Drive($client))->files;
        return $this;
    }

    public function moveTo(string $gfk, string $to_gfk) : \Google_Service_Drive_DriveFile {
        $body = new \Google_Service_Drive_DriveFile();
        // Gets the first parent. You should further implement this if you wish a different behaviour.
        $from_gfk = $this->service->get($gfk, ['fields' => 'parents'])->parents[0];

        $this->service->update($gfk, $body, ['addParents' => $to_gfk]);
        $this->service->update($gfk, $body, ['removeParents' => $from_gfk]);
        return $this->service->get($gfk, ['fields' => 'parents']);
    }

    /**
     * $parents_gfk expects an array like ['gfk parent 1', 'gfk parent 2'].
     */
    private function updateParents(string $method, string $gfk, array $parents_gfk) : \Google_Service_Drive_DriveFile {
        $body = new \Google_Service_Drive_DriveFile();
        $parents = join(',', $parents_gfk);

        $this->service->update($gfk, $body, [$method => $parents]);
        return $this->service->get($gfk, ['fields' => 'parents']);
    }

    public function addParents(string $gfk, array $parents_gfk) : \Google_Service_Drive_DriveFile {
        return $this->updateParents('addParents', $gfk, $parents_gfk);
    }

    public function removeParents(string $gfk, array $parents_gfk) : \Google_Service_Drive_DriveFile {
        return $this->updateParents('removeParents', $gfk, $parents_gfk);
    }
}
于 2019-10-14T23:13:23.567 に答える
0

私はこのコードを使用しました:

        File file =  driveService.files().get(fileId).execute()
        File targetFolder = driveService.files().get(folderId).execute()
        ParentReference newParent = new ParentReference()
        newParent.setSelfLink(targetFolder.getSelfLink())
        newParent.setParentLink(targetFolder.parents[0].getSelfLink())
        newParent.setId(folderId)
        newParent.setKind(targetFolder.getKind())
        newParent.setIsRoot(false)
        def parentsList = new ArrayList<ParentReference>()
        parentsList.add(newParent)
        file.setParents(parentsList)
        File updatedFile = driveService.files().update(fileId, file).execute()
于 2014-01-12T10:04:11.563 に答える