フォルダ間でファイルを挿入し移動させる



  • この記事は、Google Drive™ APIに関する記事を和訳したものです。
  • 原文: Insert and move files between folders
  • 元記事のライセンスは CC-BYで、この和訳記事のライセンスは CC-BYです。
  • 自己責任でご利用ください。
  • 和訳した時期は 2019年6月ころです。

ファイルおよびフォルダの挿入および取得を開始するために必要な情報の多くは、Files referenceで詳しく説明しています。 フォルダのための Drive APIメソッドを用いて作業するとき、次の役立つ詳細を考慮してください:

  • フォルダは、MIMEタイプ application/vnd.google-apps.folderを伴い、拡張子を伴わないファイルです。
  • ファイル IDが提供されている任意の場所に、ルートフォルダを参照するために、エイリアス rootを使用することができます

このページの残りの部分では、フォルダを作成する、およびフォルダ内にファイルを挿入するための重要な考慮事項の幾つかの詳細を説明します。

フォルダファイルについて

Drive APIでは、フォルダは本質的にはファイルです — それは、特別なフォルダ MIMEタイプ application/vnd.google-apps.folder で識別されます。 この MIMEタイプおよびフォルダタイトルを用いてファイルを挿入することによって、新しいフォルダを作成することができます。 フォルダタイトルをセットするとき、拡張子を含めないでください。

Java

File fileMetadata = new File();
fileMetadata.setName("Invoices");
fileMetadata.setMimeType("application/vnd.google-apps.folder");

File file = driveService.files().create(fileMetadata)
    .setFields("id")
    .execute();
System.out.println("Folder ID: " + file.getId());

Python

file_metadata = {
    'name': 'Invoices',
    'mimeType': 'application/vnd.google-apps.folder'
}
file = drive_service.files().create(body=file_metadata,
                                    fields='id').execute()
print 'Folder ID: %s' % file.get('id')

PHP

$fileMetadata = new Google_Service_Drive_DriveFile(array(
    'name' => 'Invoices',
    'mimeType' => 'application/vnd.google-apps.folder'));
$file = $driveService->files->create($fileMetadata, array(
    'fields' => 'id'));
printf("Folder ID: %s\n", $file->id);

.NET

var fileMetadata = new File()
{
    Name = "Invoices",
    MimeType = "application/vnd.google-apps.folder"
};
var request = driveService.Files.Create(fileMetadata);
request.Fields = "id";
var file = request.Execute();
Console.WriteLine("Folder ID: " + file.Id);

Ruby

file_metadata = {
    name: 'Invoices',
    mime_type: 'application/vnd.google-apps.folder'
}
file = drive_service.create_file(file_metadata, fields: 'id')
puts "Folder Id: #{file.id}"

Node.js

var fileMetadata = {
  'name': 'Invoices',
  'mimeType': 'application/vnd.google-apps.folder'
};
drive.files.create({
  resource: fileMetadata,
  fields: 'id'
}, function (err, file) {
  if (err) {
    // Handle error
    console.error(err);
  } else {
    console.log('Folder Id: ', file.id);
  }
});

Objective-C

GTLRDrive_File *metadata = [GTLRDrive_File object];
metadata.name = @"Invoices";
metadata.mimeType = @"application/vnd.google-apps.folder";
GTLRDriveQuery_FilesCreate *query = [GTLRDriveQuery_FilesCreate queryWithObject:metadata
                                                               uploadParameters:nil];
query.fields = @"id";
[driveService executeQuery:query completionHandler:^(GTLRServiceTicket *ticket,
                                                     GTLRDrive_File *file,
                                                     NSError *error) {
    if (error == nil) {
        NSLog(@"File ID %@", file.identifier);
    } else {
        NSLog(@"An error occurred: %@", error);
    }
}];

フォルダ内にファイルを挿入する

特定のフォルダ内にファイルを挿入するには、次のように、ファイルの parentsプロパティに正しい IDを指定します:

Java

String folderId = "0BwwA4oUTeiV1TGRPeTVjaWRDY1E";
File fileMetadata = new File();
fileMetadata.setName("photo.jpg");
fileMetadata.setParents(Collections.singletonList(folderId));
java.io.File filePath = new java.io.File("files/photo.jpg");
FileContent mediaContent = new FileContent("image/jpeg", filePath);
File file = driveService.files().create(fileMetadata, mediaContent)
    .setFields("id, parents")
    .execute();
System.out.println("File ID: " + file.getId());

Python

folder_id = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E'
file_metadata = {
    'name': 'photo.jpg',
    'parents': [folder_id]
}
media = MediaFileUpload('files/photo.jpg',
                        mimetype='image/jpeg',
                        resumable=True)
file = drive_service.files().create(body=file_metadata,
                                    media_body=media,
                                    fields='id').execute()
print 'File ID: %s' % file.get('id')

PHP

$folderId = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E';
$fileMetadata = new Google_Service_Drive_DriveFile(array(
    'name' => 'photo.jpg',
    'parents' => array($folderId)
));
$content = file_get_contents('files/photo.jpg');
$file = $driveService->files->create($fileMetadata, array(
    'data' => $content,
    'mimeType' => 'image/jpeg',
    'uploadType' => 'multipart',
    'fields' => 'id'));
printf("File ID: %s\n", $file->id);

.NET

var folderId = "0BwwA4oUTeiV1TGRPeTVjaWRDY1E";
var fileMetadata = new File()
{
    Name = "photo.jpg",
    Parents = new List<string>
    {
        folderId
    }
};
FilesResource.CreateMediaUpload request;
using (var stream = new System.IO.FileStream("files/photo.jpg",
    System.IO.FileMode.Open))
{
    request = driveService.Files.Create(
        fileMetadata, stream, "image/jpeg");
    request.Fields = "id";
    request.Upload();
}
var file = request.ResponseBody;
Console.WriteLine("File ID: " + file.Id);

Ruby

folder_id = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E'
file_metadata = {
    name: 'photo.jpg',
    parents: [folder_id]
}
file = drive_service.create_file(file_metadata,
                                 fields: 'id',
                                 upload_source: 'files/photo.jpg',
                                 content_type: 'image/jpeg')
puts "File Id: #{file.id}"

Node.js

var folderId = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E';
var fileMetadata = {
  'name': 'photo.jpg',
  parents: [folderId]
};
var media = {
  mimeType: 'image/jpeg',
  body: fs.createReadStream('files/photo.jpg')
};
drive.files.create({
  resource: fileMetadata,
  media: media,
  fields: 'id'
}, function (err, file) {
  if (err) {
    // Handle error
    console.error(err);
  } else {
    console.log('File Id: ', file.id);
  }
});

Objective-C

NSData *fileData = [[NSFileManager defaultManager] contentsAtPath:@"files/photo.jpg"];
NSString *folderId = @"0BwwA4oUTeiV1UVNwOHItT0xfa2M";

GTLRDrive_File *metadata = [GTLRDrive_File object];
metadata.name = @"photo.jpg";
metadata.parents = [NSArray arrayWithObject:folderId];

GTLRUploadParameters *uploadParameters = [GTLRUploadParameters uploadParametersWithData:fileData
                                                                               MIMEType:@"image/jpeg"];
uploadParameters.shouldUploadWithSingleRequest = TRUE;
GTLRDriveQuery_FilesCreate *query = [GTLRDriveQuery_FilesCreate queryWithObject:metadata
                                                               uploadParameters:uploadParameters];
query.fields = @"id";
[driveService executeQuery:query completionHandler:^(GTLRServiceTicket *ticket,
                                                     GTLRDrive_File *file,
                                                     NSError *error) {
    if (error == nil) {
        NSLog(@"File ID %@", file.identifier);
    } else {
        NSLog(@"An error occurred: %@", error);
    }
}];

parentsプロパティは、フォルダを作成するときと同様に、サブフォルダを作成するときに使用されることができます。

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

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

次のように、あるフォルダから別のものに移動させるために、両方のパラメータが使用されるかもしれません:

Java

String fileId = "1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ";
String folderId = "0BwwA4oUTeiV1TGRPeTVjaWRDY1E";
// Retrieve the existing parents to remove
File file = driveService.files().get(fileId)
    .setFields("parents")
    .execute();
StringBuilder previousParents = new StringBuilder();
for (String parent : file.getParents()) {
  previousParents.append(parent);
  previousParents.append(',');
}
// Move the file to the new folder
file = driveService.files().update(fileId, null)
    .setAddParents(folderId)
    .setRemoveParents(previousParents.toString())
    .setFields("id, parents")
    .execute();

Python

file_id = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ'
folder_id = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E'
# Retrieve the existing parents to remove
file = drive_service.files().get(fileId=file_id,
                                 fields='parents').execute()
previous_parents = ",".join(file.get('parents'))
# Move the file to the new folder
file = drive_service.files().update(fileId=file_id,
                                    addParents=folder_id,
                                    removeParents=previous_parents,
                                    fields='id, parents').execute()

PHP

$fileId = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ';
$folderId = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E';
$emptyFileMetadata = new Google_Service_Drive_DriveFile();
// Retrieve the existing parents to remove
$file = $driveService->files->get($fileId, array('fields' => 'parents'));
$previousParents = join(',', $file->parents);
// Move the file to the new folder
$file = $driveService->files->update($fileId, $emptyFileMetadata, array(
    'addParents' => $folderId,
    'removeParents' => $previousParents,
    'fields' => 'id, parents'));

.NET

var fileId = "1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ";
var folderId = "0BwwA4oUTeiV1TGRPeTVjaWRDY1E";
// Retrieve the existing parents to remove
var getRequest = driveService.Files.Get(fileId);
getRequest.Fields = "parents";
var file = getRequest.Execute();
var previousParents = String.Join(",", file.Parents);
// Move the file to the new folder
var updateRequest = driveService.Files.Update(new File(), fileId);
updateRequest.Fields = "id, parents";
updateRequest.AddParents = folderId;
updateRequest.RemoveParents = previousParents;
file = updateRequest.Execute();

Ruby

file_id = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ'
folder_id = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E'
# Retrieve the existing parents to remove
file = drive_service.get_file(file_id,
                              fields: 'parents')
previous_parents = file.parents.join(',')
# Move the file to the new folder
file = drive_service.update_file(file_id,
                                 add_parents: folder_id,
                                 remove_parents: previous_parents,
                                 fields: 'id, parents')

Node.js

fileId = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ'
folderId = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E'
// Retrieve the existing parents to remove
drive.files.get({
  fileId: fileId,
  fields: 'parents'
}, function (err, file) {
  if (err) {
    // Handle error
    console.error(err);
  } else {
    // Move the file to the new folder
    var previousParents = file.parents.join(',');
    drive.files.update({
      fileId: fileId,
      addParents: folderId,
      removeParents: previousParents,
      fields: 'id, parents'
    }, function (err, file) {
      if (err) {
        // Handle error
      } else {
        // File moved.
      }
    });
  }
});

Objective-C

NSString *fileId = @"1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ";
NSString *folderId = @"0BwwA4oUTeiV1TGRPeTVjaWRDY1E";
GTLRDrive_File *metadata = [GTLRDrive_File object];
metadata.modifiedTime = [GTLRDateTime dateTimeWithDate:[NSDate date]];
// ...

GTLRDriveQuery_FilesGet *query = [GTLRDriveQuery_FilesGet queryWithFileId:fileId];
query.fields = @"parents";
[driveService executeQuery:query completionHandler:^(GTLRServiceTicket *ticket,
                                                     GTLRDrive_File *file,
                                                     NSError * error) {
    GTLRDriveQuery_FilesUpdate *query = [GTLRDriveQuery_FilesUpdate queryWithObject:metadata
                                                                             fileId:fileId
                                                                   uploadParameters:nil];
    if (error == nil) {
        query.addParents = folderId;
        query.removeParents = [file.parents componentsJoinedByString:@", "];
        query.fields = @"id, parents";
        [driveService executeQuery:query completionHandler:^(GTLRServiceTicket *ticket,
                                                             GTLRDrive_File *file,
                                                             NSError *error) {
            if (error == nil) {
                NSLog(@"Modified time: %@", [file.modifiedTime stringValue]);
            } else {
                NSLog(@"An error occurred: %@", error);
            }
        }];
    } else {
        NSLog(@"An error occurred: %@", error);
    }
}];