> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bijection.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Interface: BijectionStorageActionWriter

> Reference for the BijectionStorageActionWriter interface in bijection/server.

[server](/api/modules/server).BijectionStorageActionWriter

## Hierarchy

* [`StorageActionWriter`](/api/interfaces/server.StorageActionWriter)

* `Pick`\<[`BijectionStorageWriter`](/api/interfaces/server.BijectionStorageWriter), `"share"` | `"revokeShare"`>

  ↳ **`BijectionStorageActionWriter`**

## Methods

### share

▸ **share**(`storageId`, `options`): `Promise`\<`string`>

Grant one recipient access to a protected file under current source policy.

#### Parameters

| Name | Type |
| :- | :- |
| `storageId` | [`GenericId`](/api/modules/values#genericid)\<`"_storage"`> |
| `options` | `Object` |
| `options.requestKey` | `string` |
| `options.recipient` | `string` |
| `options.expiresAt` | `number` |

#### Returns

`Promise`\<`string`>

#### Inherited from

Pick.share

***

### revokeShare

▸ **revokeShare**(`storageId`, `shareId`): `Promise`\<`void`>

Revoke one grant without changing other grants or the stored bytes.

#### Parameters

| Name | Type |
| :- | :- |
| `storageId` | [`GenericId`](/api/modules/values#genericid)\<`"_storage"`> |
| `shareId` | `string` |

#### Returns

`Promise`\<`void`>

#### Inherited from

Pick.revokeShare

***

### getUrl

▸ **getUrl**(`storageId`): `Promise`\<`null` | `string`>

Get the URL for a file in storage by its `Id<"_storage">`.

The GET response includes a standard HTTP Digest header with a sha256 checksum.

**`Example`**

```typescript theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
const url = await ctx.storage.getUrl(storageId);
```

#### Parameters

| Name | Type | Description |
| :- | :- | :- |
| `storageId` | [`GenericId`](/api/modules/values#genericid)\<`"_storage"`> | The `Id<"_storage">` of the file to fetch from Bijection storage. |

#### Returns

`Promise`\<`null` | `string`>

* A URL which fetches the file via an HTTP GET, or `null` if the file no longer exists.

#### Inherited from

[StorageActionWriter](/api/interfaces/server.StorageActionWriter).[getUrl](/api/interfaces/server.StorageActionWriter#geturl)

▸ **getUrl**\<`T`>(`storageId`): `Promise`\<`null` | `string`>

**`Deprecated`**

Passing a string is deprecated, use `storage.getUrl(Id<"_storage">)` instead.

Get the URL for a file in storage by its [StorageId](/api/modules/server#storageid).

The GET response includes a standard HTTP Digest header with a sha256 checksum.

#### Type parameters

| Name | Type |
| :- | :- |
| `T` | extends `string` |

#### Parameters

| Name | Type | Description |
| :- | :- | :- |
| `storageId` | `T` extends \{ `__tableName`: `any`  } ? `never` : `T` | The [StorageId](/api/modules/server#storageid) of the file to fetch from Bijection storage. |

#### Returns

`Promise`\<`null` | `string`>

* A url which fetches the file via an HTTP GET, or `null` if it no longer exists.

#### Inherited from

[StorageActionWriter](/api/interfaces/server.StorageActionWriter).[getUrl](/api/interfaces/server.StorageActionWriter#geturl)

***

### getMetadata

▸ **getMetadata**(`storageId`): `Promise`\<`null` | [`FileMetadata`](/api/modules/server#filemetadata)>

**`Deprecated`**

Use `ctx.db.system.get("_storage", storageId)` instead, which returns
equivalent metadata from the `_storage` system table (with a slightly different shape):

```typescript theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
const metadata = await ctx.db.system.get("_storage", storageId);
// { _id, _creationTime, sha256, size, contentType? }
```

Get metadata for a file.

#### Parameters

| Name | Type | Description |
| :- | :- | :- |
| `storageId` | [`GenericId`](/api/modules/values#genericid)\<`"_storage"`> | The `Id<"_storage">` of the file. |

#### Returns

`Promise`\<`null` | [`FileMetadata`](/api/modules/server#filemetadata)>

* A [FileMetadata](/api/modules/server#filemetadata) object if found or `null` if not found.

#### Inherited from

[StorageActionWriter](/api/interfaces/server.StorageActionWriter).[getMetadata](/api/interfaces/server.StorageActionWriter#getmetadata)

▸ **getMetadata**\<`T`>(`storageId`): `Promise`\<`null` | [`FileMetadata`](/api/modules/server#filemetadata)>

**`Deprecated`**

Use `ctx.db.system.get("_storage", storageId)` instead.

Get metadata for a file.

#### Type parameters

| Name | Type |
| :- | :- |
| `T` | extends `string` |

#### Parameters

| Name | Type | Description |
| :- | :- | :- |
| `storageId` | `T` extends \{ `__tableName`: `any`  } ? `never` : `T` | The [StorageId](/api/modules/server#storageid) of the file. |

#### Returns

`Promise`\<`null` | [`FileMetadata`](/api/modules/server#filemetadata)>

* A [FileMetadata](/api/modules/server#filemetadata) object if found or `null` if not found.

#### Inherited from

[StorageActionWriter](/api/interfaces/server.StorageActionWriter).[getMetadata](/api/interfaces/server.StorageActionWriter#getmetadata)

***

### generateUploadUrl

▸ **generateUploadUrl**(): `Promise`\<`string`>

Generate a short-lived URL for uploading a file into storage.

The client should make a POST request to this URL with the file as the
body. The response will be a JSON object containing a newly allocated
`Id<"_storage">` (`{ storageId: "..." }`).

**`Example`**

```typescript theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
// In a mutation, generate the upload URL:
export const generateUploadUrl = mutation({
  args: {},
  returns: v.string(),
  handler: async (ctx) => {
    return await ctx.storage.generateUploadUrl();
  },
});

// On the client, upload the file:
// const uploadUrl = await generateUploadUrl();
// const result = await fetch(uploadUrl, { method: "POST", body: file });
// const { storageId } = await result.json();
```

#### Returns

`Promise`\<`string`>

* A short-lived URL for uploading a file via HTTP POST.

#### Inherited from

[StorageActionWriter](/api/interfaces/server.StorageActionWriter).[generateUploadUrl](/api/interfaces/server.StorageActionWriter#generateuploadurl)

***

### delete

▸ **delete**(`storageId`): `Promise`\<`void`>

Delete a file from Bijection storage.

Once a file is deleted, any URLs previously generated by [getUrl](/api/interfaces/server.BijectionStorageReader#geturl) will return 404s.

**`Example`**

```typescript theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
await ctx.storage.delete(storageId);
```

#### Parameters

| Name | Type | Description |
| :- | :- | :- |
| `storageId` | [`GenericId`](/api/modules/values#genericid)\<`"_storage"`> | The `Id<"_storage">` of the file to delete from Bijection storage. |

#### Returns

`Promise`\<`void`>

#### Inherited from

[StorageActionWriter](/api/interfaces/server.StorageActionWriter).[delete](/api/interfaces/server.StorageActionWriter#delete)

▸ **delete**\<`T`>(`storageId`): `Promise`\<`void`>

**`Deprecated`**

Passing a string is deprecated, use `storage.delete(Id<"_storage">)` instead.

Delete a file from Bijection storage.

Once a file is deleted, any URLs previously generated by [getUrl](/api/interfaces/server.BijectionStorageReader#geturl) will return 404s.

#### Type parameters

| Name | Type |
| :- | :- |
| `T` | extends `string` |

#### Parameters

| Name | Type | Description |
| :- | :- | :- |
| `storageId` | `T` extends \{ `__tableName`: `any`  } ? `never` : `T` | The [StorageId](/api/modules/server#storageid) of the file to delete from Bijection storage. |

#### Returns

`Promise`\<`void`>

#### Inherited from

[StorageActionWriter](/api/interfaces/server.StorageActionWriter).[delete](/api/interfaces/server.StorageActionWriter#delete)

***

### get

▸ **get**(`storageId`): `Promise`\<`null` | `Blob`>

Download a file from storage as a Blob.

Only available in actions and HTTP actions (not in mutations or queries).

#### Parameters

| Name | Type | Description |
| :- | :- | :- |
| `storageId` | [`GenericId`](/api/modules/values#genericid)\<`"_storage"`> | The `Id<"_storage">` of the file. |

#### Returns

`Promise`\<`null` | `Blob`>

A Blob containing the file contents, or `null` if the file doesn't exist.

#### Inherited from

[StorageActionWriter](/api/interfaces/server.StorageActionWriter).[get](/api/interfaces/server.StorageActionWriter#get)

▸ **get**\<`T`>(`storageId`): `Promise`\<`null` | `Blob`>

**`Deprecated`**

Passing a string is deprecated, use `storage.get(Id<"_storage">)` instead.

Get a Blob containing the file associated with the provided [StorageId](/api/modules/server#storageid), or `null` if there is no file.

#### Type parameters

| Name | Type |
| :- | :- |
| `T` | extends `string` |

#### Parameters

| Name | Type |
| :- | :- |
| `storageId` | `T` extends \{ `__tableName`: `any`  } ? `never` : `T` |

#### Returns

`Promise`\<`null` | `Blob`>

#### Inherited from

[StorageActionWriter](/api/interfaces/server.StorageActionWriter).[get](/api/interfaces/server.StorageActionWriter#get)

***

### store

▸ **store**(`blob`, `options?`): `Promise`\<[`GenericId`](/api/modules/values#genericid)\<`"_storage"`>>

Upload a Blob directly to storage.

Only available in actions and HTTP actions. For client-side uploads from
mutations, use `generateUploadUrl()` instead.

**`Example`**

```typescript theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
const storageId = await ctx.storage.store(blob);
// Save storageId to the database via ctx.runMutation
```

#### Parameters

| Name | Type | Description |
| :- | :- | :- |
| `blob` | `Blob` | The Blob to store. |
| `options?` | `Object` | Optional settings. Pass `sha256` to verify the file integrity. |
| `options.sha256?` | `string` | - |

#### Returns

`Promise`\<[`GenericId`](/api/modules/values#genericid)\<`"_storage"`>>

The `Id<"_storage">` of the newly stored file.

#### Inherited from

[StorageActionWriter](/api/interfaces/server.StorageActionWriter).[store](/api/interfaces/server.StorageActionWriter#store)
