Updates a file's metadata and/or content. When calling this method, only populate fields in the request that you want to modify. When updating fields, some fields might be changed automatically, such as modifiedDate. This method supports patch semantics. Try it now or see an example.
This method supports an /upload URI and accepts uploaded media with the following characteristics:
- Maximum file size: 5120GB
- Accepted Media MIME types:
*/*
Note: Specify a valid MIME type, rather than the literal */*
value. The literal */*
is only used to indicate that any valid MIME type can be uploaded.
Request
HTTP request
This method provides media upload functionality through two separate URIs. For more details, see the document on media upload.
- Upload URI, for media upload requests:
PUT https://www.googleapis.com/upload/drive/v2/files/fileId
- Metadata URI, for metadata-only requests:
PUT https://www.googleapis.com/drive/v2/files/fileId
Parameters
Parameter name | Value | Description |
---|---|---|
Path parameters | ||
fileId |
string |
The ID of the file to update. |
Required query parameters | ||
uploadType |
string |
The type of upload request to the /upload URI. If you
are uploading data (using an /upload URI), this field is
required. If you are creating a metadata-only file, this field is not
required. Additionally, this field is not shown in the "Try this API"
widget because the widget doesn't support data uploads.
Acceptable values are:
|
Optional query parameters | ||
addParents |
string |
Comma-separated list of parent IDs to add. |
convert |
boolean |
This parameter is deprecated and has no function.
(Default: false )
|
enforceSingleParent |
boolean |
Deprecated. Adding files to multiple folders is no longer supported. Use shortcuts instead.
(Default: false )
|
includeLabels |
string |
A comma-separated list of IDs of labels to include in the labelInfo part of the response.
|
includePermissionsForView |
string |
Specifies which additional view's permissions to include in the response. Only 'published' is supported. |
modifiedDateBehavior |
string |
Determines the behavior in which modifiedDate is updated. This overrides setModifiedDate .
Acceptable values are:
|
newRevision |
boolean |
Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If true or not set, a new blob is created as head revision, and previous unpinned revisions are preserved for a short period of time. Pinned revisions are stored indefinitely, using additional storage quota, up to a maximum of 200 revisions. For details on how revisions are retained, see the Drive Help Center. Note that this field is ignored if there is no payload in the request.
(Default: true )
|
ocr |
boolean |
Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
(Default: false )
|
ocrLanguage |
string |
If ocr is true, hints at the language to use. Valid values are BCP 47 codes. |
pinned |
boolean |
Whether to pin the new revision. A file can have a maximum of 200 pinned revisions. Note that this field is ignored if there is no payload in the request.
(Default: false )
|
removeParents |
string |
Comma-separated list of parent IDs to remove. |
setModifiedDate |
boolean |
Whether to set the modified date using the value supplied in the request body. Setting this field to true is equivalent to modifiedDateBehavior=fromBodyOrNow , and false is equivalent to modifiedDateBehavior=now . To prevent any changes to the modified date set modifiedDateBehavior=noChange .
(Default: false )
|
supportsAllDrives |
boolean |
Whether the requesting application supports both My Drives and shared drives.
(Default: false )
|
supportsTeamDrives |
boolean |
Deprecated use supportsAllDrives instead.
(Default: false )
|
timedTextLanguage |
string |
The language of the timed text. |
timedTextTrackName |
string |
The timed text track name. |
updateViewedDate |
boolean |
Whether to update the view date after successfully updating the file.
(Default: true )
|
useContentAsIndexableText |
boolean |
Whether to use the content as indexable text.
(Default: false )
|
Authorization
This request requires authorization with at least one of the following scopes:
Scope |
---|
https://www.googleapis.com/auth/drive |
https://www.googleapis.com/auth/drive.file |
https://www.googleapis.com/auth/drive.appdata |
https://www.googleapis.com/auth/drive.scripts |
https://www.googleapis.com/auth/drive.apps.readonly |
https://www.googleapis.com/auth/drive.metadata |
Some scopes are restricted and require a security assessment for your app to use them. For more information, see the authentication and authorization page.
Request body
In the request body, supply the relevant portions of a Files resource, according to the rules of patch semantics, with the following properties:
Property name | Value | Description | Notes |
---|---|---|---|
Optional Properties | |||
contentRestrictions[].readOnly |
boolean |
Whether the content of the file is read-only. If a file is read-only, a new revision of the file may not be added, comments may not be added or modified, and the title of the file may not be modified. | writable |
contentRestrictions[].reason |
string |
Reason for why the content of the file is restricted. This is only mutable on requests that also set readOnly=true . |
writable |
copyRequiresWriterPermission |
boolean |
Whether the options to copy, print, or download this file, should be disabled for readers and commenters. | writable |
description |
string |
A short description of the file. | writable |
folderColorRgb |
string |
Folder color as an RGB hex string if the file is a folder or a shortcut to a folder. The list of supported colors is available in the folderColorPalette field of the About resource. If an unsupported color is specified, it will be changed to the closest color in the palette. | writable |
indexableText.text |
string |
The text to be indexed for this file. | writable |
labels.starred |
boolean |
Whether this file is starred by the user. | writable |
labels.trashed |
boolean |
Whether the file has been trashed, either explicitly or from a trashed parent folder. Only the owner may trash a file. The trashed item is excluded from all files.list responses returned for any user who does not own the file. However, all users with access to the file can see the trashed item metadata in an API response. All users with access can copy, download, export, and share the file. | writable |
labels.viewed |
boolean |
Whether this file has been viewed by this user. | writable |
lastViewedByMeDate |
datetime |
Last time this file was viewed by the user (formatted RFC 3339 timestamp). | writable |
mimeType |
string |
The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type. | writable |
modifiedDate |
datetime |
Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set. | writable |
originalFilename |
string |
The original filename of the uploaded content if available, or else the original value of the title field. This is only available for files with binary content in Google Drive. |
writable |
parents[] |
list |
Collection of parent folders which contain this file. If not specified as part of an insert request, the file will be placed directly in the user's My Drive folder. If not specified as part of a copy request, the file will inherit any discoverable parents of the source file. Update requests can also use the |
writable |
properties[] |
list |
The list of properties. | writable |
title |
string |
The title of this file. Note that for immutable items such as the top level folders of shared drives, My Drive root folder, and Application Data folder the title is constant. | writable |
writersCanShare |
boolean |
Whether writers can share the document with other users. Not populated for items in shared drives. | writable |
Response
If successful, this method returns a Files resource in the response body.
Examples
Note: The code examples available for this method do not represent all supported programming languages (see the client libraries page for a list of supported languages).
Java
Uses the Java client library.
import com.google.api.client.http.FileContent; import com.google.api.services.drive.Drive; import com.google.api.services.drive.model.File; import java.io.IOException; // ... public class MyClass { // ... /** * Update an existing file's metadata and content. * * @param service Drive API service instance. * @param fileId ID of the file to update. * @param newTitle New title for the file. * @param newDescription New description for the file. * @param newMimeType New MIME type for the file. * @param newFilename Filename of the new content to upload. * @param newRevision Whether or not to create a new revision for this * file. * @return Updated file metadata if successful, {@code null} otherwise. */ private static File updateFile(Drive service, String fileId, String newTitle, String newDescription, String newMimeType, String newFilename, boolean newRevision) { try { // First retrieve the file from the API. File file = service.files().get(fileId).execute(); // File's new metadata. file.setTitle(newTitle); file.setDescription(newDescription); file.setMimeType(newMimeType); // File's new content. java.io.File fileContent = new java.io.File(newFilename); FileContent mediaContent = new FileContent(newMimeType, fileContent); // Send the request to the API. File updatedFile = service.files().update(fileId, file, mediaContent).execute(); return updatedFile; } catch (IOException e) { System.out.println("An error occurred: " + e); return null; } } // ... }
.NET
Uses the .NET client library.
using Google.Apis.Drive.v2; using Google.Apis.Drive.v2.Data; // ... public class MyClass { // ... /// <summary> /// Update an existing file's metadata and content. /// </summary> /// <param name="service">Drive API service instance.</param> /// <param name="fileId">ID of the file to update.</param> /// <param name="newTitle">New title for the file.</param> /// <param name="newDescription">New description for the file.</param> /// <param name="newMimeType">New MIME type for the file.</param> /// <param name="newFilename">Filename of the new content to upload.</param> /// <param name="newRevision">Whether or not to create a new revision for this file.</param> /// <returns>Updated file metadata, null is returned if an API error occurred.</returns> private static File updateFile(DriveService service, String fileId, String newTitle, String newDescription, String newMimeType, String newFilename, bool newRevision) { try { // First retrieve the file from the API. File file = service.Files.Get(fileId).Execute(); // File's new metadata. file.Title = newTitle; file.Description = newDescription; file.MimeType = newMimeType; // File's new content. byte[] byteArray = System.IO.File.ReadAllBytes(newFilename); System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);<br> // Send the request to the API. FilesResource.UpdateMediaUpload request = service.Files.Update(file, fileId, stream, newMimeType); request.NewRevision = newRevision; request.Upload(); File updatedFile = request.ResponseBody; return updatedFile; } catch (Exception e) { Console.WriteLine("An error occurred: " + e.Message); return null; } } //... }
PHP
Uses the PHP client library.
/** * Update an existing file's metadata and content. * * @param Google_Service_Drive $service Drive API service instance. * @param string $fileId ID of the file to update. * @param string $newTitle New title for the file. * @param string $newDescription New description for the file. * @param string $newMimeType New MIME type for the file. * @param string $newFilename Filename of the new content to upload. * @param bool $newRevision Whether or not to create a new revision for this file. * @return Google_Servie_Drive_DriveFile The updated file. NULL is returned if * an API error occurred. */ function updateFile($service, $fileId, $newTitle, $newDescription, $newMimeType, $newFileName, $newRevision) { try { // First retrieve the file from the API. $file = $service->files->get($fileId); // File's new metadata. $file->setTitle($newTitle); $file->setDescription($newDescription); $file->setMimeType($newMimeType); // File's new content. $data = file_get_contents($newFileName); $additionalParams = array( 'newRevision' => $newRevision, 'data' => $data, 'mimeType' => $newMimeType ); // Send the request to the API. $updatedFile = $service->files->update($fileId, $file, $additionalParams); return $updatedFile; } catch (Exception $e) { print "An error occurred: " . $e->getMessage(); } }
Python
Uses the Python client library.
from apiclient import errors from apiclient.http import MediaFileUpload # ... def update_file(service, file_id, new_title, new_description, new_mime_type, new_filename, new_revision): """Update an existing file's metadata and content. Args: service: Drive API service instance. file_id: ID of the file to update. new_title: New title for the file. new_description: New description for the file. new_mime_type: New MIME type for the file. new_filename: Filename of the new content to upload. new_revision: Whether or not to create a new revision for this file. Returns: Updated file metadata if successful, None otherwise. """ try: # First retrieve the file from the API. file = service.files().get(fileId=file_id).execute() # File's new metadata. file['title'] = new_title file['description'] = new_description file['mimeType'] = new_mime_type # File's new content. media_body = MediaFileUpload( new_filename, mimetype=new_mime_type, resumable=True) # Send the request to the API. updated_file = service.files().update( fileId=file_id, body=file, newRevision=new_revision, media_body=media_body).execute() return updated_file except errors.HttpError, error: print 'An error occurred: %s' % error return None
JavaScript
Uses the JavaScript client library.
/** * Update an existing file's metadata and content. * * @param {String} fileId ID of the file to update. * @param {Object} fileMetadata existing Drive file's metadata. * @param {File} fileData File object to read data from. * @param {Function} callback Callback function to call when the request is complete. */ function updateFile(fileId, fileMetadata, fileData, callback) { const boundary = '-------314159265358979323846'; const delimiter = "\r\n--" + boundary + "\r\n"; const close_delim = "\r\n--" + boundary + "--"; var reader = new FileReader(); reader.readAsBinaryString(fileData); reader.onload = function(e) { var contentType = fileData.type || 'application/octet-stream'; // Updating the metadata is optional and you can instead use the value from drive.files.get. var base64Data = btoa(reader.result); var multipartRequestBody = delimiter + 'Content-Type: application/json\r\n\r\n' + JSON.stringify(fileMetadata) + delimiter + 'Content-Type: ' + contentType + '\r\n' + 'Content-Transfer-Encoding: base64\r\n' + '\r\n' + base64Data + close_delim; var request = gapi.client.request({ 'path': '/upload/drive/v2/files/' + fileId, 'method': 'PUT', 'params': {'uploadType': 'multipart', 'alt': 'json'}, 'headers': { 'Content-Type': 'multipart/mixed; boundary="' + boundary + '"' }, 'body': multipartRequestBody}); if (!callback) { callback = function(file) { console.log(file) }; } request.execute(callback); } }
Go
Uses the Go client library.
import ( "google.golang.org/drive/v2" "fmt" ) // UpdateFile fetches and updates a given file with the given fields func UpdateFile(d *drive.Service, fileId string, title string, description string, mimeType string, filename string, newRevision bool) (*drive.File, error) { f, err := d.Files.Get(fileId).Do() if err != nil { fmt.Printf("An error occurred: %v\n", err) return nil, err } f.Title = title f.Description = description f.MimeType = mimeType m, err := os.Open(filename) if err != nil { fmt.Printf("An error occurred: %v\n", err) return nil, err } r, err := d.Files.Update(fileId, f).Media(m).Do() if err != nil { fmt.Printf("An error occurred: %v\n", err) return nil, err } return r, nil }
Objective-C
Uses the Objective-C client library.
#import "GTLDrive.h" // ... + (void)updateFileWithService:(GTLServiceDrive *)service fileId:(NSString *)fileId newTitle:(NSString *)newTitle newDescription:(NSString *)newDescription newMimeType:(NSString *)newMimeType newData:(NSData *)newData isNewRevision:(BOOL)isNewRevision completionBlock:(void (^)(GTLDriveFile *, NSError *))completionBlock { // First retrieve the file from the API. GTLQueryDrive *getQuery = [GTLQueryDrive queryForFilesGetWithFileId:fileId]; // getQueryTicket can be used to track the status of the request. GTLServiceTicket *getQueryTicket = [service executeQuery:getQuery completionHandler:^(GTLServiceTicket *ticket, GTLDriveFile *file, NSError *error) { if (error == nil) { // File's new metadata. file.title = newTitle; file.descriptionProperty = newDescription; file.mimeType = newMimeType; // File's new content. GTLUploadParameters *uploadParameters = [GTLUploadParameters uploadParametersWithData:newData MIMEType:newMimeType]; // Send the request to the API. GTLQueryDrive *updateQuery = [GTLQueryDrive queryForFilesUpdateWithObject:file fileId:fileId uploadParameters:uploadParameters]; updateQuery.newRevision = isNewRevision; // updateQueryTicket can be used to track the status of the request. GTLServiceTicket *updateQueryTicket = [service executeQuery:updateQuery completionHandler:^(GTLServiceTicket *ticket, GTLDriveFile *updatedFile, NSError *error) { if (error == nil) { completionBlock(updatedFile, nil); } else { NSLog(@"An error occurred: %@", error); completionBlock(nil, error); } }]; } else { NSLog(@"An error occurred: %@", error); completionBlock(nil, error); } }]; } // ...
Try it!
Note: APIs Explorer currently supports metadata requests only.
Use the APIs Explorer below to call this method on live data and see the response.