File Upload API Quickstart
Start using the File Upload API in minutes with multiple upload methods
Welcome to the File Upload API
The File Upload API provides flexible and efficient file upload services with multiple upload methods to meet various business needs. Whether it's remote file migration, large file transfers, or quick small file uploads, our API offers the best solutions for you.
Base64 Upload — Base64 encoded file upload, suitable for small files
File Stream Upload — Efficient binary file stream upload, suitable for large files
URL File Upload — Automatically download and upload files from remote URLs
File uploads are free
Uploading files to our service incurs no charges. You can upload files confidently without worrying about upload costs or fees.
Important Reminder
Uploaded files are deleted 24 hours after upload. Please download or migrate important files promptly.
Authentication
All API requests require authentication using a Bearer token. Please obtain your API key from the API Key Management page.
WARNING
Please keep your API key secure and never share it publicly. If you suspect your key has been compromised, reset it immediately.
API Base URL
https://ai.modelfold.onlineAuthentication Header
Authorization: Bearer YOUR_API_KEYQuick Start Guide
Step 1: Choose Upload Method
Select the appropriate upload method based on your needs:
URL File Upload
Suitable for downloading and uploading files from remote servers:
<TabItem value="bash" label="cURL"> bash curl -X POST "https://ai.modelfold.online/api/file-url-upload" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "fileUrl": "https://example.com/sample-image.jpg", "uploadPath": "images", "fileName": "my-image.jpg" }'
JavaScript
const response = await fetch('https://ai.modelfold.online/api/file-url-upload', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
fileUrl: 'https://example.com/sample-image.jpg',
uploadPath: 'images',
fileName: 'my-image.jpg'
})
});
const result = await response.json();
console.log('Upload successful:', result);Python
import requests
url = "https://ai.modelfold.online/api/file-url-upload"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"fileUrl": "https://example.com/sample-image.jpg",
"uploadPath": "images",
"fileName": "my-image.jpg"
}
response = requests.post(url, json=payload, headers=headers)
result = response.json()
print(f"Upload successful: {result}")</TabItem>
File Stream Upload
Suitable for directly uploading local files, especially large files:
<TabItem value="bash" label="cURL"> bash curl -X POST "https://ai.modelfold.online/api/file-stream-upload" \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "file=@/path/to/your-file.jpg" \ -F "uploadPath=images/user-uploads" \ -F "fileName=custom-name.jpg"
JavaScript
const formData = new FormData();
formData.append('file', fileInput.files[0]);
formData.append('uploadPath', 'images/user-uploads');
formData.append('fileName', 'custom-name.jpg');
const response = await fetch('https://ai.modelfold.online/api/file-stream-upload', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
},
body: formData
});
const result = await response.json();
console.log('Upload successful:', result);Python
import requests
url = "https://ai.modelfold.online/api/file-stream-upload"
headers = {
"Authorization": "Bearer YOUR_API_KEY"
}
files = {
'file': ('your-file.jpg', open('/path/to/your-file.jpg', 'rb')),
'uploadPath': (None, 'images/user-uploads'),
'fileName': (None, 'custom-name.jpg')
}
response = requests.post(url, headers=headers, files=files)
result = response.json()
print(f"Upload successful: {result}")</TabItem>
Base64 Upload
Suitable for Base64 encoded file data:
<TabItem value="bash" label="cURL"> bash curl -X POST "https://ai.modelfold.online/api/file-base64-upload" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "base64Data": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...", "uploadPath": "images", "fileName": "base64-image.png" }'
JavaScript
const response = await fetch('https://ai.modelfold.online/api/file-base64-upload', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
base64Data: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...',
uploadPath: 'images',
fileName: 'base64-image.png'
})
});
const result = await response.json();
console.log('Upload successful:', result);Python
import requests
import base64
# Read file and convert to base64
with open('/path/to/your-file.jpg', 'rb') as f:
file_data = base64.b64encode(f.read()).decode('utf-8')
base64_data = f'data:image/jpeg;base64,{file_data}'
url = "https://ai.modelfold.online/api/file-base64-upload"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"base64Data": base64_data,
"uploadPath": "images",
"fileName": "base64-image.jpg"
}
response = requests.post(url, json=payload, headers=headers)
result = response.json()
print(f"Upload successful: {result}")</TabItem>
Additional Step 1: fileName Parameter Explanation
INFO
The fileName parameter is optional across all upload methods, with the following behavior:
fileName (string, optional)
Filename behavior description:
- If no filename is provided, a random filename will be automatically generated
- If the new uploaded filename matches an existing one, the old file will be overwritten
- Due to caching, this change may not take effect immediately when overwriting files
Examples:
// No fileName provided - auto-generate random filename
{ uploadPath: "images" } // → generates "abc123.jpg"
// Provide fileName - use specified filename
{ uploadPath: "images", fileName: "my-photo.jpg" }
// Overwrite file - replace existing file (with caching delay)
{ uploadPath: "images", fileName: "my-photo.jpg" } // Overwrites previous fileStep 2: Handle Response
After successful upload, you'll receive a response containing file information:
{
"success": true,
"code": 200,
"msg": "File upload successful",
"data": {
"success": true,
"fileName": "my-image.jpg",
"filePath": "ModelFold/12345/images/my-image.jpg",
"downloadUrl": "https://tempfile.redpandaai.co/ModelFold/12345/images/my-image.jpg",
"fileSize": 245760,
"mimeType": "image/jpeg",
"uploadedAt": "2025-01-15T10:30:00.000Z"
}
}Upload Method Comparison
Choose the upload method best suited to your needs:
URL File Upload — Best for : File migration, batch processing Advantages : No local file required Automatic download processing Supports remote resources Limitations : Requires publicly accessible URL 30-second download timeout Recommended ≤100MB
File Stream Upload — Best for : Large files, local files Advantages : High transfer efficiency Supports large files Binary transmission Limitations : Requires local file Server processing time
Base64 Upload — Best for : Small files, API integration Advantages : JSON format transmission Easy integration Supports Data URLs Limitations : Data size increases by 33% Not suitable for large files Recommended ≤10MB
Practical Examples
Batch File Upload
Process multiple files using file stream upload:
JavaScript
class FileUploadAPI {
constructor(apiKey) {
this.apiKey = apiKey;
this.baseUrl = 'https://ai.modelfold.online';
}
async uploadFile(file, uploadPath, fileName = null) {
const formData = new FormData();
formData.append('file', file);
formData.append('uploadPath', uploadPath);
if (fileName) formData.append('fileName', fileName);
const response = await fetch(`${this.baseUrl}/api/file-stream-upload`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${this.apiKey}`
},
body: formData
});
const r = await response.json();
if (!r.success || r.code !== 200) throw new Error(r.msg);
return r;
}
async uploadFromUrl(fileUrl, uploadPath, fileName = null) {
const response = await fetch(`${this.baseUrl}/api/file-url-upload`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${this.apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
fileUrl,
uploadPath,
fileName
})
});
const r = await response.json();
if (!r.success || r.code !== 200) throw new Error(r.msg);
return r;
}
async uploadBase64(base64Data, uploadPath, fileName = null) {
const response = await fetch(`${this.baseUrl}/api/file-base64-upload`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${this.apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
base64Data,
uploadPath,
fileName
})
});
const r = await response.json();
if (!r.success || r.code !== 200) throw new Error(r.msg);
return r;
}
}
// Usage example
const uploader = new FileUploadAPI('YOUR_API_KEY');
// Batch upload files
async function uploadMultipleFiles(files) {
const results = [];
for (let i = 0; i < files.length; i++) {
try {
const result = await uploader.uploadFile(
files[i],
'user-uploads',
`file-${i + 1}-${files[i].name}`
);
results.push(result);
console.log(`File ${i + 1} upload successful:`, result.data.downloadUrl);
} catch (error) {
console.error(`File ${i + 1} upload failed:`, error.message);
}
}
return results;
}
// Batch upload from URLs
async function uploadFromUrls(urls) {
const results = [];
for (let i = 0; i < urls.length; i++) {
try {
const result = await uploader.uploadFromUrl(
urls[i],
'downloads',
`download-${i + 1}.jpg`
);
results.push(result);
console.log(`URL ${i + 1} upload successful:`, result.data.downloadUrl);
} catch (error) {
console.error(`URL ${i + 1} upload failed:`, error.message);
}
}
return results;
}Python
import requests
import base64
import os
from typing import List, Optional
class FileUploadAPI:
def __init__(self, api_key: str):
self.api_key = api_key
self.base_url = 'https://ai.modelfold.online'
self.headers = {
'Authorization': f'Bearer {api_key}'
}
def upload_file(self, file_path: str, upload_path: str,
file_name: Optional[str] = None) -> dict:
"""File stream upload"""
files = {
'file': (os.path.basename(file_path), open(file_path, 'rb'))
}
data = {}
data['uploadPath'] = upload_path
if file_name:
data['fileName'] = file_name
response = requests.post(
f'{self.base_url}/api/file-stream-upload',
headers=self.headers,
files=files,
data=data
)
r = response.json()
if not r.get('success') or r.get('code') != 200:
raise Exception(r.get('msg'))
return r
def upload_from_url(self, file_url: str, upload_path: str,
file_name: Optional[str] = None) -> dict:
"""URL file upload"""
payload = {
'fileUrl': file_url,
'uploadPath': upload_path,
'fileName': file_name
}
response = requests.post(
f'{self.base_url}/api/file-url-upload',
headers={**self.headers, 'Content-Type': 'application/json'},
json=payload
)
r = response.json()
if not r.get('success') or r.get('code') != 200:
raise Exception(r.get('msg'))
return r
def upload_base64(self, base64_data: str, upload_path: str,
file_name: Optional[str] = None) -> dict:
"""Base64 file upload"""
payload = {
'base64Data': base64_data,
'uploadPath': upload_path,
'fileName': file_name
}
response = requests.post(
f'{self.base_url}/api/file-base64-upload',
headers={**self.headers, 'Content-Type': 'application/json'},
json=payload
)
r = response.json()
if not r.get('success') or r.get('code') != 200:
raise Exception(r.get('msg'))
return r
# Usage example
def main():
uploader = FileUploadAPI('YOUR_API_KEY')
# Batch upload local files
file_paths = [
'/path/to/file1.jpg',
'/path/to/file2.png',
'/path/to/document.pdf'
]
print("Starting batch file upload...")
for i, file_path in enumerate(file_paths):
try:
result = uploader.upload_file(
file_path,
'user-uploads',
f'file-{i + 1}-{os.path.basename(file_path)}'
)
print(f"File {i + 1} upload successful: {result['data']['downloadUrl']}")
except Exception as e:
print(f"File {i + 1} upload failed: {e}")
# Batch upload from URLs
urls = [
'https://example.com/image1.jpg',
'https://example.com/image2.png'
]
print("\nStarting batch URL upload...")
for i, url in enumerate(urls):
try:
result = uploader.upload_from_url(
url,
'downloads',
f'download-{i + 1}.jpg'
)
print(f"URL {i + 1} upload successful: {result['data']['downloadUrl']}")
except Exception as e:
print(f"URL {i + 1} upload failed: {e}")
if __name__ == '__main__':
main()Error Handling
Errors are returned with HTTP 200 and an error code in the response body. Common errors and how to handle them:
401 Unauthorized
// Check if API key is correct
const result = await response.json();
if (result.code === 401) {
console.error('Invalid API key, please check Authorization header');
// Re-obtain or update API key
}400 Bad Request
// Check request parameters
const result = await response.json();
if (result.code === 400) {
console.error('Request parameter error:', result.msg);
// Check if required parameters are provided
// Check if file format is supported
// Check if URL is accessible
}500 Server Error
// Implement retry mechanism
async function uploadWithRetry(uploadFunction, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await uploadFunction();
} catch (error) {
if (i === maxRetries - 1) throw error;
// Exponential backoff
const delay = Math.pow(2, i) * 1000;
await new Promise(resolve => setTimeout(resolve, delay));
}
}
}Best Practices
File Size Optimization
* **Small files** (≤1MB): Recommended to use Base64 upload * **Medium files** (1MB-10MB): Recommended to use file stream upload * **Large files** (>10MB): Must use file stream upload * **Remote files**: Use URL upload, note 100MB limitPerformance Optimization
* Implement concurrency control to avoid uploading too many files simultaneously * Use appropriate retry mechanisms for network issues * Monitor upload progress and provide user feedbackSecurity Considerations
* Keep API keys secure and rotate regularly * Validate file types and sizes * Consider encrypted transmission for sensitive filesError Handling
* Implement comprehensive error handling logic * Maintain upload logs for troubleshooting * Provide user-friendly error messages * Offer retry options for failed uploadsFile Storage Information
Important Reminder
Uploaded files are deleted 24 hours after upload.
- Files are accessible and downloadable immediately after upload
- Recommended to download or migrate important files before expiration
- Use the
downloadUrlfield to get direct download links
Status Codes
Error codes are in the response body code; the HTTP status is 200.
- 200 (Success): Request successfully processed, file upload completed
- 400 (Bad Request): Incorrect request parameters or missing required parameters
- 401 (Unauthorized): Missing authentication credentials or invalid credentials
- 405 (Method Not Allowed): Unsupported request method, check HTTP method
- 500 (Server Error): Unexpected error occurred while processing request, please retry or contact support
Next Steps
URL File Upload — Learn how to upload files from remote URLs
File Stream Upload — Learn efficient file stream upload methods
Base64 Upload — Master Base64 encoded file upload
Support
INFO
Need help? Our technical support team is here for you.
- Email: support@modelfold.online
- Documentation: ai.modelfold.online
Ready to start uploading files? Get your API key and begin using the file upload service now!