Hi @findl , Hope this will help you.
Solution 1: Use sdk api package of gemini (nodejs, python, golang, …)
Solution 2: With php (in here, I work with the Wordpress) and javascript
You can see gemini api docs (Files API | Gemini API | Google AI for Developers)
To upload file, you need to perform the following steps:
[PHP - Wordpress]
$file = $_FILES['upload_file'];
/**
* Step 1: Initial resumable request defining metadata:
*/
$res1 = wp_remote_post(
'https://generativelanguage.googleapis.com/upload/v1beta/files?key=' . $api_key,
'headers' => [
'Content-Type' => 'application/json',
'X-Goog-Upload-Protocol' => 'resumable',
'X-Goog-Upload-Command' => 'start',
'X-Goog-Upload-Header-Content-Length' => $file['size'],
'X-Goog-Upload-Header-Content-Type' => $file['type'],
],
'body' => json_encode([
'file' => [
'display_name' => $file['name']
]
])
);
// res1 will response a headers (only headers).
// We need get upload url from resoponse header 'x-goog-upload-url'
$upload_url = $res1['headers']['x-goog-upload-url'];
/**
* Step 2: Upload file
*/
$res2 = wp_remote_post(
$upload_url, // upload_url get from res1 header above.
'headers' => [
'Content-Length' => $file['size'],
'X-Goog-Upload-Command' => 'upload, finalize',
'X-Goog-Upload-Offset' => 0,
],
'body' => file_get_contents($file['tmp_name']) // Get content / buffer / binary of file upload
);
// After upload, you can check file uploaed at: [GET] https://generativelanguage.googleapis.com/v1beta/files?key=$api_key
// res2: 'name', 'mimeType', 'state', 'uri', ...
/**
* Step 3: Generate Content
*/
$res3 = wp_remote_post(
'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=' . $api_key,
'headers' => [
'Content-Length' => $file['size'],
'X-Goog-Upload-Command' => 'upload, finalize',
'X-Goog-Upload-Offset' => 0,
],
'body' => json_encode([
'contents' => [
[
'parts' => [
['text' => 'YOUR promt text in here. Ex: Caption of this file'],
[
'file_data' => [
'mime_type' => $file['type'],
'file_uri' => $res2['file']['uri'], // Get uri from res2 uploaded.
]
]
]
]
]
])
);
[jQuery]
$(uploadFileEl).on('change', function (e) {
var file = e.target.files[0];
var formData = new FormData();
formData.append('upload_file', file);
$.ajax({
url: 'YOUR_API_ENDPOINT/upload',
method: 'POST',
data: formData,
processData: false,
contentType: false,
success: function (response) {
console.log('Res:', response);
},
error: function (xhr) {
console.error('Error:', xhr);
},
});
});