# Using BlobField for File Uploads
SF Toolkit supports automatic file uploads when saving SObjects with blob data. This is done through the new BlobField field type, which allows you to set file content that will be uploaded to Salesforce when the SObject is saved.
## Defining SObjects with BlobFields
When defining an SObject class that contains blob data, use the BlobField field type for the field that will contain the file content. You should also specify the blob_field parameter in the class definition to indicate which field contains the blob data.
Note that the below Document SObject has already been implemented in the sf_toolkit.data.standard_schemas module for your convenience. ```python from sf_toolkit import SObject, BlobField
- class Document(SObject):
Id = IdField() Name = TextField() Description = TextField() FolderId = IdField() # Define the blob field Body = BlobField()
## Setting File Content
The BlobField can accept several types of input:
File Path - A string or Path object pointing to a file
Binary Data - bytes containing the file content
String Content - A str that will be encoded to UTF-8 bytes
File-like Object - An object with a read() method (like open file handles)
```python # Using a file path doc.Body = “./myfile.pdf” # or doc.Body = Path(“./myfile.pdf”)
# Using binary data with open(“./myfile.pdf”, “rb”) as f:
doc.Body = f.read()
# Using string content doc.Body = “This is the content of a text file”
# Using a file-like object file_obj = io.BytesIO(b”File content”) file_obj.name = “myfile.txt” # Optional - sets filename doc.Body = file_obj ```
## Automatic Upload on Save
Once you’ve set content to a BlobField, the file will be automatically uploaded when you call save() on the SObject. No separate file upload method is needed.
```python # Create a ContentVersion with a file cv = ContentVersion(
Title=”My Document”, PathOnClient=”example.pdf”, Description=”Description of the file”
)
# Set the file content cv.VersionData = Path(“./example.pdf”)
# Save - file upload happens automatically cv.save()
print(f”Created ContentVersion with ID: {cv.Id}”) ```
## Common Salesforce Blob SObjects
There are three main SObject types in Salesforce that support blob data. These standard objects have been implemented in sf_toolkit.data.standard_schemas module for your use:
ContentVersion (for Lightning Files)
Document (Classic Files)
Attachment (for Notes and Attachments)
## Updating Existing Records with New Files
You can also update an existing record with a new file by setting its BlobField and calling save():
```python # Get an existing ContentVersion cv = ContentVersion.read(“068XXXXXXXXXXXX”)
# Update metadata cv.Description = “Updated description”
# Update the file content cv.VersionData = Path(“./updated_file.pdf”)
# Save - file upload happens automatically cv.save() ```
## File Size Limits
For ContentVersion: Maximum file size is 2 GB
For other objects (Document, Attachment): Maximum file size is 500 MB
## Implementation Details
The BlobField implementation automatically:
Converts the input to a consistent format using the BlobData class
Determines the appropriate filename and content type
Creates a multipart/form-data request with both the metadata and file content
Uses HTTPX for efficient file uploads, including streaming for large files
Handles responses and error cases
This allows SObject instances with blob fields to be saved with a simple save() call without any additional code.