A File object is created from your Bucket object using .
Package
@google-cloud/storage
Constructors
(constructor)(bucket, name, options)
constructor(bucket: Bucket, name: string, options?: FileOptions);
Constructs a file object.
Parameters |
Name |
Description |
bucket |
Bucket
The Bucket instance this file is attached to.
|
name |
string
The name of the remote file.
|
options |
FileOptions
Configuration options.
|
Example
const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const myBucket = storage.bucket('my-bucket');
const file = myBucket.file('my-file');
Properties
acl
bucket
cloudStorageURI
get cloudStorageURI(): URL;
The object's Cloud Storage URI (gs://
)
Example
ts
const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const bucket = storage.bucket('my-bucket');
const file = bucket.file('image.png');
// `gs://my-bucket/image.png`
const href = file.cloudStorageURI.href;
crc32cGenerator
crc32cGenerator: CRC32CValidatorGenerator;
generation
instancePreconditionOpts
instancePreconditionOpts?: PreconditionOptions;
kmsKeyName
name
parent
signer
storage
userProject
Methods
copy(destination, options)
copy(destination: string | Bucket | File, options?: CopyOptions): Promise<CopyResponse>;
copy(destination, callback)
copy(destination: string | Bucket | File, callback: CopyCallback): void;
Returns |
Type |
Description |
void |
|
copy(destination, options, callback)
copy(destination: string | Bucket | File, options: CopyOptions, callback: CopyCallback): void;
Returns |
Type |
Description |
void |
|
createReadStream(options)
createReadStream(options?: CreateReadStreamOptions): Readable;
Create a readable stream to read the contents of the remote file. It can be piped to a writable stream or listened to for 'data' events to read a file's contents.
In the unlikely event there is a mismatch between what you downloaded and the version in your Bucket, your error handler will receive an error with code "CONTENT_DOWNLOAD_MISMATCH". If you receive this error, the best recourse is to try downloading the file again.
NOTE: Readable streams will emit the end
event when the file is fully downloaded.
Returns |
Type |
Description |
Readable |
{ReadableStream}
|
Example
//-
// Downloading a File
//
// The example below demonstrates how we can reference a remote file, then
// pipe its contents to a local file. This is effectively creating a local
// backup of your remote data.
//-
const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const bucket = storage.bucket('my-bucket');
const fs = require('fs');
const remoteFile = bucket.file('image.png');
const localFilename = '/Users/stephen/Photos/image.png';
remoteFile.createReadStream()
.on('error', function(err) {})
.on('response', function(response) {
// Server connected and responded with the specified status and headers.
})
.on('end', function() {
// The file is fully downloaded.
})
.pipe(fs.createWriteStream(localFilename));
//-
// To limit the downloaded data to only a byte range, pass an options
// object.
//-
const logFile = myBucket.file('access_log');
logFile.createReadStream({
start: 10000,
end: 20000
})
.on('error', function(err) {})
.pipe(fs.createWriteStream('/Users/stephen/logfile.txt'));
//-
// To read a tail byte range, specify only `options.end` as a negative
// number.
//-
const logFile = myBucket.file('access_log');
logFile.createReadStream({
end: -100
})
.on('error', function(err) {})
.pipe(fs.createWriteStream('/Users/stephen/logfile.txt'));
createResumableUpload(options)
createResumableUpload(options?: CreateResumableUploadOptions): Promise<CreateResumableUploadResponse>;
createResumableUpload(options, callback)
createResumableUpload(options: CreateResumableUploadOptions, callback: CreateResumableUploadCallback): void;
Returns |
Type |
Description |
void |
|
createResumableUpload(callback)
createResumableUpload(callback: CreateResumableUploadCallback): void;
Returns |
Type |
Description |
void |
|
createWriteStream(options)
createWriteStream(options?: CreateWriteStreamOptions): Writable;
Create a writable stream to overwrite the contents of the file in your bucket.
A File object can also be used to create files for the first time.
Resumable uploads are automatically enabled and must be shut off explicitly by setting options.resumable
to false
.
There is some overhead when using a resumable upload that can cause noticeable performance degradation while uploading a series of small files. When uploading files less than 10MB, it is recommended that the resumable feature is disabled.
NOTE: Writable streams will emit the finish
event when the file is fully uploaded.
See See
Returns |
Type |
Description |
Writable |
{WritableStream}
|
Example
const fs = require('fs');
const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const myBucket = storage.bucket('my-bucket');
const file = myBucket.file('my-file');
//-
// Uploading a File
//
// Now, consider a case where we want to upload a file to your bucket. You
// have the option of using {@link Bucket#upload}, but that is just
// a convenience method which will do the following.
//-
fs.createReadStream('/Users/stephen/Photos/birthday-at-the-zoo/panda.jpg')
.pipe(file.createWriteStream())
.on('error', function(err) {})
.on('finish', function() {
// The file upload is complete.
});
//-
// Uploading a File with gzip compression
//-
fs.createReadStream('/Users/stephen/site/index.html')
.pipe(file.createWriteStream({ gzip: true }))
.on('error', function(err) {})
.on('finish', function() {
// The file upload is complete.
});
//-
// Downloading the file with `createReadStream` will automatically decode
// the file.
//-
//-
//
//
// One last case you may run into is when you want to upload a file to your
// bucket and set its metadata at the same time. Like above, you can use
// {@link Bucket#upload} to do this, which is just a wrapper around
// the following.
//-
fs.createReadStream('/Users/stephen/Photos/birthday-at-the-zoo/panda.jpg')
.pipe(file.createWriteStream({
metadata: {
contentType: 'image/jpeg',
metadata: {
custom: 'metadata'
}
}
}))
.on('error', function(err) {})
.on('finish', function() {
// The file upload is complete.
});
//- //
Continuing a Resumable Upload
// // One can capture a uri
from a resumable upload to reuse later. // Additionally, for validation, one can also capture and pass crc32c
. //- let uri: string | undefined = undefined; let resumeCRC32C: string | undefined = undefined;
fs.createWriteStream() .on('uri', link => {uri = link}) .on('crc32', crc32c => {resumeCRC32C = crc32c});
// later... fs.createWriteStream({uri, resumeCRC32C});
delete(options)
delete(options?: DeleteOptions): Promise<[r.Response]>;
Parameter |
Name |
Description |
options |
DeleteOptions
|
Returns |
Type |
Description |
Promise<[Response]> |
|
delete(options, callback)
delete(options: DeleteOptions, callback: DeleteCallback): void;
Parameters |
Name |
Description |
options |
DeleteOptions
|
callback |
DeleteCallback
|
Returns |
Type |
Description |
void |
|
delete(callback)
delete(callback: DeleteCallback): void;
Parameter |
Name |
Description |
callback |
DeleteCallback
|
Returns |
Type |
Description |
void |
|
disableAutoRetryConditionallyIdempotent_(coreOpts, methodType, localPreconditionOptions)
disableAutoRetryConditionallyIdempotent_(coreOpts: any, methodType: AvailableServiceObjectMethods, localPreconditionOptions?: PreconditionOptions): void;
Parameters |
Name |
Description |
coreOpts |
any
|
methodType |
AvailableServiceObjectMethods
|
localPreconditionOptions |
PreconditionOptions
|
Returns |
Type |
Description |
void |
|
download(options)
download(options?: DownloadOptions): Promise<DownloadResponse>;
download(options, callback)
download(options: DownloadOptions, callback: DownloadCallback): void;
Returns |
Type |
Description |
void |
|
download(callback)
download(callback: DownloadCallback): void;
Returns |
Type |
Description |
void |
|
from(publicUrlOrGsUrl, storageInstance, options)
static from(publicUrlOrGsUrl: string, storageInstance: Storage, options?: FileOptions): File;
Gets a reference to a Cloud Storage file from the provided URL in string format.
Returns |
Type |
Description |
File_2 |
{File}
|
generateSignedPostPolicyV2(options)
generateSignedPostPolicyV2(options: GenerateSignedPostPolicyV2Options): Promise<GenerateSignedPostPolicyV2Response>;
generateSignedPostPolicyV2(options, callback)
generateSignedPostPolicyV2(options: GenerateSignedPostPolicyV2Options, callback: GenerateSignedPostPolicyV2Callback): void;
Returns |
Type |
Description |
void |
|
generateSignedPostPolicyV2(callback)
generateSignedPostPolicyV2(callback: GenerateSignedPostPolicyV2Callback): void;
Returns |
Type |
Description |
void |
|
generateSignedPostPolicyV4(options)
generateSignedPostPolicyV4(options: GenerateSignedPostPolicyV4Options): Promise<GenerateSignedPostPolicyV4Response>;
generateSignedPostPolicyV4(options, callback)
generateSignedPostPolicyV4(options: GenerateSignedPostPolicyV4Options, callback: GenerateSignedPostPolicyV4Callback): void;
Returns |
Type |
Description |
void |
|
generateSignedPostPolicyV4(callback)
generateSignedPostPolicyV4(callback: GenerateSignedPostPolicyV4Callback): void;
Returns |
Type |
Description |
void |
|
get(options)
get(options?: GetFileOptions): Promise<GetResponse<File>>;
Returns |
Type |
Description |
Promise<GetResponse<File>> |
|
get(callback)
get(callback: InstanceResponseCallback<File>): void;
Parameter |
Name |
Description |
callback |
InstanceResponseCallback<File>
|
Returns |
Type |
Description |
void |
|
get(options, callback)
get(options: GetFileOptions, callback: InstanceResponseCallback<File>): void;
Parameters |
Name |
Description |
options |
GetFileOptions
|
callback |
InstanceResponseCallback<File>
|
Returns |
Type |
Description |
void |
|
getExpirationDate()
getExpirationDate(): Promise<GetExpirationDateResponse>;
getExpirationDate(callback)
getExpirationDate(callback: GetExpirationDateCallback): void;
Returns |
Type |
Description |
void |
|
getSignedUrl(cfg)
getSignedUrl(cfg: GetSignedUrlConfig): Promise<GetSignedUrlResponse>;
getSignedUrl(cfg, callback)
getSignedUrl(cfg: GetSignedUrlConfig, callback: GetSignedUrlCallback): void;
Returns |
Type |
Description |
void |
|
isPublic()
isPublic(): Promise<IsPublicResponse>;
Returns |
Type |
Description |
Promise<IsPublicResponse> |
|
isPublic(callback)
isPublic(callback: IsPublicCallback): void;
Parameter |
Name |
Description |
callback |
IsPublicCallback
|
Returns |
Type |
Description |
void |
|
makePrivate(options)
makePrivate(options?: MakeFilePrivateOptions): Promise<MakeFilePrivateResponse>;
makePrivate(callback)
makePrivate(callback: MakeFilePrivateCallback): void;
Returns |
Type |
Description |
void |
|
makePrivate(options, callback)
makePrivate(options: MakeFilePrivateOptions, callback: MakeFilePrivateCallback): void;
Returns |
Type |
Description |
void |
|
makePublic()
makePublic(): Promise<MakeFilePublicResponse>;
makePublic(callback)
makePublic(callback: MakeFilePublicCallback): void;
Returns |
Type |
Description |
void |
|
move(destination, options)
move(destination: string | Bucket | File, options?: MoveOptions): Promise<MoveResponse>;
move(destination, callback)
move(destination: string | Bucket | File, callback: MoveCallback): void;
Returns |
Type |
Description |
void |
|
move(destination, options, callback)
move(destination: string | Bucket | File, options: MoveOptions, callback: MoveCallback): void;
Returns |
Type |
Description |
void |
|
publicUrl()
The public URL of this File Use to enable anonymous access via the returned URL.
Returns |
Type |
Description |
string |
{string}
|
Example
const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const bucket = storage.bucket('albums');
const file = bucket.file('my-file');
// publicUrl will be "https://storage.googleapis.com/albums/my-file"
const publicUrl = file.publicUrl();
rename(destinationFile, options)
rename(destinationFile: string | File, options?: RenameOptions): Promise<RenameResponse>;
Parameters |
Name |
Description |
destinationFile |
string | File
|
options |
RenameOptions
|
Returns |
Type |
Description |
Promise<RenameResponse> |
|
rename(destinationFile, callback)
rename(destinationFile: string | File, callback: RenameCallback): void;
Parameters |
Name |
Description |
destinationFile |
string | File
|
callback |
RenameCallback
|
Returns |
Type |
Description |
void |
|
rename(destinationFile, options, callback)
rename(destinationFile: string | File, options: RenameOptions, callback: RenameCallback): void;
Parameters |
Name |
Description |
destinationFile |
string | File
|
options |
RenameOptions
|
callback |
RenameCallback
|
Returns |
Type |
Description |
void |
|
request(reqOpts)
request(reqOpts: DecorateRequestOptions): Promise<RequestResponse>;
Parameter |
Name |
Description |
reqOpts |
DecorateRequestOptions
|
Returns |
Type |
Description |
Promise<RequestResponse> |
|
request(reqOpts, callback)
request(reqOpts: DecorateRequestOptions, callback: BodyResponseCallback): void;
Parameters |
Name |
Description |
reqOpts |
DecorateRequestOptions
|
callback |
BodyResponseCallback
|
Returns |
Type |
Description |
void |
|
restore(options)
restore(options: RestoreOptions): Promise<File>;
Restores a soft-deleted file
Parameter |
Name |
Description |
options |
RestoreOptions
Restore options.
|
Returns |
Type |
Description |
Promise<File> |
{Promise
|
rotateEncryptionKey(options)
rotateEncryptionKey(options?: RotateEncryptionKeyOptions): Promise<RotateEncryptionKeyResponse>;
rotateEncryptionKey(callback)
rotateEncryptionKey(callback: RotateEncryptionKeyCallback): void;
Returns |
Type |
Description |
void |
|
rotateEncryptionKey(options, callback)
rotateEncryptionKey(options: RotateEncryptionKeyOptions, callback: RotateEncryptionKeyCallback): void;
Returns |
Type |
Description |
void |
|
save(data, options)
save(data: SaveData, options?: SaveOptions): Promise<void>;
Parameters |
Name |
Description |
data |
SaveData
|
options |
SaveOptions
|
Returns |
Type |
Description |
Promise<void> |
|
save(data, callback)
save(data: SaveData, callback: SaveCallback): void;
Parameters |
Name |
Description |
data |
SaveData
|
callback |
SaveCallback
|
Returns |
Type |
Description |
void |
|
save(data, options, callback)
save(data: SaveData, options: SaveOptions, callback: SaveCallback): void;
Returns |
Type |
Description |
void |
|
setEncryptionKey(encryptionKey)
setEncryptionKey(encryptionKey: string | Buffer): this;
Parameter |
Name |
Description |
encryptionKey |
string | "\"buffer\"".__global.Buffer
An AES-256 encryption key.
|
Returns |
Type |
Description |
this |
{File}
|
Examples
const crypto = require('crypto');
const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const myBucket = storage.bucket('my-bucket');
const encryptionKey = crypto.randomBytes(32);
const fileWithCustomEncryption = myBucket.file('my-file');
fileWithCustomEncryption.setEncryptionKey(encryptionKey);
const fileWithoutCustomEncryption = myBucket.file('my-file');
fileWithCustomEncryption.save('data', function(err) {
// Try to download with the File object that hasn't had
// `setEncryptionKey()` called:
fileWithoutCustomEncryption.download(function(err) {
// We will receive an error:
// err.message === 'Bad Request'
// Try again with the File object we called `setEncryptionKey()` on:
fileWithCustomEncryption.download(function(err, contents) {
// contents.toString() === 'data'
});
});
});
Example of uploading an encrypted file:
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';
// The path to your file to upload
// const filePath = 'path/to/your/file';
// The new ID for your GCS file
// const destFileName = 'your-new-file-name';
// The key to encrypt the object with
// const key = 'TIbv/fjexq+VmtXzAlc63J4z5kFmWJ6NdAPQulQBT7g=';
// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');
// Creates a client
const storage = new Storage();
async function uploadEncryptedFile() {
const options = {
destination: destFileName,
encryptionKey: Buffer.from(key, 'base64'),
// Optional:
// Set a generation-match precondition to avoid potential race conditions
// and data corruptions. The request to upload is aborted if the object's
// generation number does not match your precondition. For a destination
// object that does not yet exist, set the ifGenerationMatch precondition to 0
// If the destination object already exists in your bucket, set instead a
// generation-match precondition using its generation number.
preconditionOpts: {ifGenerationMatch: generationMatchPrecondition},
};
await storage.bucket(bucketName).upload(filePath, options);
console.log(
`File ${filePath} uploaded to gs://${bucketName}/${destFileName}`
);
}
uploadEncryptedFile().catch(console.error);
Example of downloading an encrypted file:
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';
// The ID of your GCS file
// const srcFileName = 'your-file-name';
// The path to which the file should be downloaded
// const destFileName = '/local/path/to/file.txt';
// The Base64 encoded decryption key, which should be the same key originally
// used to encrypt the file
// const encryptionKey = 'TIbv/fjexq+VmtXzAlc63J4z5kFmWJ6NdAPQulQBT7g=';
// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');
// Creates a client
const storage = new Storage();
async function downloadEncryptedFile() {
const options = {
destination: destFileName,
};
// Decrypts and downloads the file. This can only be done with the key used
// to encrypt and upload the file.
await storage
.bucket(bucketName)
.file(srcFileName)
.setEncryptionKey(Buffer.from(encryptionKey, 'base64'))
.download(options);
console.log(`File ${srcFileName} downloaded to ${destFileName}`);
}
downloadEncryptedFile().catch(console.error);
setMetadata(metadata: FileMetadata, options?: SetMetadataOptions): Promise<SetMetadataResponse<FileMetadata>>;
Parameters |
Name |
Description |
metadata |
FileMetadata
|
options |
SetMetadataOptions
|
Returns |
Type |
Description |
Promise<SetMetadataResponse<FileMetadata>> |
|
setMetadata(metadata: FileMetadata, callback: MetadataCallback<FileMetadata>): void;
Returns |
Type |
Description |
void |
|
setMetadata(metadata: FileMetadata, options: SetMetadataOptions, callback: MetadataCallback<FileMetadata>): void;
Returns |
Type |
Description |
void |
|
setStorageClass(storageClass, options)
setStorageClass(storageClass: string, options?: SetStorageClassOptions): Promise<SetStorageClassResponse>;
setStorageClass(storageClass, options, callback)
setStorageClass(storageClass: string, options: SetStorageClassOptions, callback: SetStorageClassCallback): void;
Returns |
Type |
Description |
void |
|
setStorageClass(storageClass, callback)
setStorageClass(storageClass: string, callback?: SetStorageClassCallback): void;
Returns |
Type |
Description |
void |
|
setUserProject(userProject)
setUserProject(userProject: string): void;
Set a user project to be billed for all requests made from this File object.
Parameter |
Name |
Description |
userProject |
string
The user project.
|
Returns |
Type |
Description |
void |
|
Example
const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const bucket = storage.bucket('albums');
const file = bucket.file('my-file');
file.setUserProject('grape-spaceship-123');
startResumableUpload_(dup, options)
startResumableUpload_(dup: Duplexify, options?: CreateResumableUploadOptions): void;
This creates a resumable-upload upload stream.
Returns |
Type |
Description |
void |
|
startSimpleUpload_(dup, options)
startSimpleUpload_(dup: Duplexify, options?: CreateWriteStreamOptions): void;
Takes a readable stream and pipes it to a remote file. Unlike startResumableUpload_
, which uses the resumable upload technique, this method uses a simple upload (all or nothing).
Parameters |
Name |
Description |
dup |
Duplexify
Duplexify stream of data to pipe to the file.
|
options |
CreateWriteStreamOptions
Configuration object.
|
Returns |
Type |
Description |
void |
|