Upload from a File
Stream directly from disk instead of loading the entire object into memory.
rust
use sia_storage::{Object, UploadOptions};
let file = tokio::fs::File::open("example.txt").await?;
let obj = Object::default();
let mut obj = sdk.upload(obj, file, UploadOptions::default()).await?;
obj.metadata = br#"{"File Name":"example.txt"}"#.to_vec();
sdk.pin_object(&obj).await?;go
file, err := os.Open("example.txt")
if err != nil {
panic(err)
}
defer file.Close()
obj := siastorage.NewEmptyObject()
if err := client.Upload(ctx, &obj, file); err != nil {
panic(err)
}
obj.UpdateMetadata([]byte(`{"File Name":"example.txt"}`))
if err := client.PinObject(ctx, obj); err != nil {
panic(err)
}python
with open("example.txt", "rb") as reader:
obj = await sdk.upload(PinnedObject(), reader, UploadOptions())
obj.update_metadata(json.dumps({"File Name": "example.txt"}).encode())
await sdk.pin_object(obj)javascript
import { PinnedObject } from '@siafoundation/sia-storage'
import { createReadStream } from 'node:fs'
import { Readable } from 'node:stream'
const stream = Readable.toWeb(createReadStream('example.txt'))
const obj = await sdk.upload(new PinnedObject(), stream)
obj.updateMetadata(
new TextEncoder().encode(JSON.stringify({ 'File Name': 'example.txt' })),
)
await sdk.pinObject(obj)javascript
import { PinnedObject } from '@siafoundation/sia-storage'
// Get a File from an <input type="file"> element
const input = document.querySelector('input[type=file]')
const file = input.files[0]
const obj = await sdk.upload(new PinnedObject(), file.stream())
obj.updateMetadata(
new TextEncoder().encode(JSON.stringify({ 'File Name': file.name })),
)
await sdk.pinObject(obj)