uploadFileBytes method
Future<OpenAIFile>
uploadFileBytes({
- required FilePurpose purpose,
- required Uint8List fileBytes,
- required String filename,
- FileExpiresAfter? expiresAfter,
- String? mimeType,
Upload a file from raw bytes.
purpose
one of:
- assistants, batch, fine-tune, vision, user_data, evals
- (system may also return assistants_output, batch_output, fine-tune-results)
Use expiresAfter
to set a TTL (e.g. for batch). If provided, this is sent
as form fields: expires_after[anchor]
and expires_after[seconds]
.
Implementation
Future<OpenAIFile> uploadFileBytes({
required FilePurpose purpose,
required Uint8List fileBytes,
required String filename,
FileExpiresAfter? expiresAfter,
String? mimeType, // optional; will be inferred if not provided
}) async {
final uri = baseUrl.resolve('files');
final req = http.MultipartRequest('POST', uri)
..headers.addAll(getHeaders({}) ?? {})
..fields['purpose'] = purpose.toJson();
if (expiresAfter != null) {
req.fields['expires_after[anchor]'] = expiresAfter.anchor;
req.fields['expires_after[seconds]'] = expiresAfter.seconds.toString();
}
final contentType = mimeType ?? (lookupMimeType(filename) ?? 'application/octet-stream');
req.files.add(http.MultipartFile.fromBytes('file', fileBytes, filename: filename, contentType: MediaType.parse(contentType)));
final streamed = await httpClient.send(req);
final res = await http.Response.fromStream(streamed);
if (res.statusCode == 200) {
return OpenAIFile.fromJson(jsonDecode(res.body));
}
throw OpenAIRequestException.fromHttpResponse(res);
}