> ## Documentation Index
> Fetch the complete documentation index at: https://www.ayrshare.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Télécharger une image ou une vidéo

> Téléchargez une image ou un petit fichier vidéo à inclure dans votre publication

export const HeaderAPI = ({noProfileKey, profileKeyRequired}) => <>
    <ParamField header="Authorization" type="string" required>
      <a href="/apis/overview#authorization">API Key</a> of the Primary Profile.
      <br />
      <br />
      Format: <code>Authorization: Bearer API_KEY</code>
    </ParamField>
    {!noProfileKey && (profileKeyRequired ? <ParamField header="Profile-Key" type="string" required>
          <a href="/apis/overview#profile-key-format">Profile Key</a> of a User Profile.
          <br />
          <br />
          Format: <code>Profile-Key: PROFILE_KEY</code>
        </ParamField> : <ParamField header="Profile-Key" type="string">
          <a href="/apis/overview#profile-key-format">Profile Key</a> of a User Profile.
          <br />
          <br />
          Format: <code>Profile-Key: PROFILE_KEY</code>
        </ParamField>)}
  </>;

export const PlansAvailable = ({plans = [], maxPackRequired}) => {
  let displayPlans = plans;
  if (plans && plans.length === 1) {
    const lowerCasePlan = plans[0].toLowerCase();
    if (lowerCasePlan === "business") {
      displayPlans = ["Launch", "Business", "Enterprise"];
    } else if (lowerCasePlan === "premium") {
      displayPlans = ["Premium", "Launch", "Business", "Enterprise"];
    }
  }
  return <Note>
Available on {displayPlans.length === 1 ? "the " : ""}
{displayPlans.join(", ").replace(/\b\w/g, l => l.toUpperCase())}{" "}
{displayPlans.length > 1 ? "plans" : "plan"}.

{maxPackRequired && <span onClick={() => window.open('https://www.ayrshare.com/docs/additional/maxpack', '_self')} className="flex items-center mt-2 cursor-pointer">
 <span className="px-1.5 py-0.5 rounded text-sm" style={{
    backgroundColor: '#C264B6',
    color: 'white',
    fontSize: '12px'
  }}>
   Max Pack required
 </span>
</span>}
</Note>;
};

<PlansAvailable plans={["premium"]} maxPackRequired={false} />

Ce point de terminaison vous permet de télécharger un fichier, une image ou une petite vidéo à inclure dans votre publication. L'URL de l'image, qui peut être utilisée dans le point de terminaison /post, sera retournée.

Vous pouvez transmettre le fichier soit sous forme de ***multipart form data*** comme paramètre de formulaire, soit sous forme de **fichier encodé en Base64** comme paramètre de corps.

Notes importantes sur les téléchargements de médias :

1. Pour de meilleures performances, nous recommandons
   <ul className="custom-bullets">
     <li>d'héberger les fichiers médias sur votre propre serveur (par ex. AWS S3).</li>
     <li>de transmettre l'URL du média directement dans le paramètre `mediaUrls` du point de terminaison [/post](/apis/post/overview).</li>
     <li>Cette approche est plus rapide que de télécharger des fichiers via ce point de terminaison.</li>
   </ul>

2. Rétention des fichiers médias

   <ul className="custom-bullets">
     <li>Les fichiers téléchargés sont stockés pendant 90 jours.</li>
     <li>Après 90 jours :</li>

     <ul className="custom-bullets">
       <li>Les publications déjà publiées sur les réseaux sociaux ne sont pas affectées.</li>
       <li>Les publications programmées ne parviendront pas à être publiées si elles référencent un média expiré.</li>
     </ul>
   </ul>

3. Limites de taille de fichier
   <ul className="custom-bullets">
     <li>Taille maximale du fichier : 30 Mo.</li>
     <li>Pour les fichiers plus volumineux, consultez notre guide sur [la gestion des téléchargements de médias volumineux](/apis/media/upload-large-media).</li>
   </ul>

<Tip>Si vos médias sont déjà accessibles via une URL externe, comme un bucket S3, vous pouvez ignorer le téléchargement des fichiers vers Ayrshare. Effectuez simplement un POST vers le point de terminaison `/post` avec votre URL accessible en externe dans le paramètre de corps `mediaURLs` et votre fichier sera automatiquement téléchargé.</Tip>

## Paramètres d'en-tête

<HeaderAPI noProfileKey={true} />

<ParamField body="Content-Type" type="string" required>
  Utilisez `multipart/form-data` si vous envoyez des données multipart form - voir ci-dessous. Sinon, envoyez le standard `application/json`.
</ParamField>

## Paramètres du corps

<ParamField body="file" type="string or object" required>
  Taille de fichier max 30 Mo.

  Nous recommandons d'envoyer sous forme d'objet multipart form-data plutôt qu'en encodage Base64.
</ParamField>

<ParamField body="fileName" type="string">
  Le nom du fichier à télécharger.
</ParamField>

<ParamField body="description" type="string">
  Une description du fichier.
</ParamField>

### Envoyer en Multipart Form-Data

Envoyez le fichier média sous forme d'objet multipart form-data. Veillez à spécifier le `Content-Type` comme mentionné ci-dessus.

### Envoyer en Base64

Envoyez le fichier média sous forme de chaîne encodée en Base64 comme chaîne Data URI. La chaîne doit commencer par `data:content/type;base64`

Exemple d'encodage avec le format de sortie Data URI :

<ul className="custom-bullets">
  <li>Image : [https://base64.guru/converter/encode/image](https://base64.guru/converter/encode/image)</li>
  <li>Vidéo : [https://base64.guru/converter/encode/video](https://base64.guru/converter/encode/video)</li>
</ul>

Remarque : le point de terminaison /post accepte des fichiers plus volumineux via une URL externe avec le paramètre `mediaUrls`.

<RequestExample>
  ```bash cURL theme={"system"}
  # Send as Multipart Form-Data
  curl \
  -H "Authorization: Bearer API_KEY" \
  -F "file=@test.png" \
  -F "fileName=test.png" \
  -F "description=best image" \
  -X POST https://api.ayrshare.com/api/media/upload

  # Send as Base64
  curl \
  -H "Authorization: Bearer API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"file": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ...", "fileName": "test.png", "description": "best image"}' \
  -X POST https://api.ayrshare.com/api/media/upload
  ```

  ```javascript JavaScript theme={"system"}
  // Send as Multipart Form-Data
  const FormData = require('form-data');
  const fs = require('fs');

  const API_KEY = "API_KEY";
  const imagePath = './test.png';

  const form = new FormData();
  form.append('file', fs.createReadStream(imagePath));
  form.append('fileName', 'test.png');
  form.append('description', 'best image');

  fetch("https://api.ayrshare.com/api/media/upload", {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${API_KEY}`
      // Don't set Content-Type header - FormData will set it automatically with boundary
    },
    body: form
  })
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(console.error);

  // Send as Base64
  const API_KEY = "API_KEY";
  const base64 = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ...";

  fetch("https://api.ayrshare.com/api/media/upload", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          "Authorization": `Bearer ${API_KEY}`
        },
        body: JSON.stringify({
          file: base64,
          fileName: "test.png",
          description: "best image"
        }),
      })
        .then((res) => res.json())
        .then((json) => console.log(json))
        .catch(console.error);
  ```

  ```python Python theme={"system"}
  # Send as Multipart Form-Data
  import requests

  # For a local file:
  files = {
      'file': ('test.png', open('test.png', 'rb')),
  }

  # Form data
  data = {
      'fileName': 'test.png',
      'description': 'best image'
  }
  headers = {
      'Authorization': 'Bearer API_KEY'
  }

  r = requests.post(
      'https://api.ayrshare.com/api/media/upload',
      files=files,
      data=data,
      headers=headers
  )

  print(r.json())

  # Send as Base64
  import requests

  payload = {'file': 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ...',
          'fileName': "test.png",
          'description': "best image"}
  headers = {'Content-Type': 'application/json',
          'Authorization': 'Bearer API_KEY'}

  r = requests.post('https://api.ayrshare.com/api/media/upload',
      json=payload,
      headers=headers)

  print(r.json())
  ```

  ```php PHP theme={"system"}
  # Send as Multipart Form-Data
  <?php
    // Generate a boundary string
    $boundary = uniqid();

    // Open the file
    $file = file_get_contents('test.png');

    // Build the multipart form data
    $data = '';
    $data .= "--" . $boundary . "\r\n";
    $data .= 'Content-Disposition: form-data; name="file"; filename="test.png"' . "\r\n";
    $data .= "Content-Type: image/png\r\n\r\n";
    $data .= $file . "\r\n";

    $data .= "--" . $boundary . "\r\n";
    $data .= 'Content-Disposition: form-data; name="fileName"' . "\r\n\r\n";
    $data .= "test.png\r\n";

    $data .= "--" . $boundary . "\r\n";
    $data .= 'Content-Disposition: form-data; name="description"' . "\r\n\r\n";
    $data .= "best image\r\n";

    $data .= "--" . $boundary . "--\r\n";

    // Setup the context for the request
    $options = [
        'http' => [
            'method' => 'POST',
            'header' => "Authorization: Bearer API_KEY\r\n" .
                      "Content-Type: multipart/form-data; boundary=" . $boundary . "\r\n" .
                      "Content-Length: " . strlen($data) . "\r\n",
            'content' => $data
        ]
    ];

    // Send the request
    $context = stream_context_create($options);
    $result = file_get_contents('https://api.ayrshare.com/api/media/upload', false, $context);

    // Print the response
    echo $result;

  # Send as Base64
  <?php
  $data = [
      'file' => 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ...',
      'fileName' => "test.png",
      'description' => "best image"
  ];

  $ch = curl_init('https://api.ayrshare.com/api/media/upload');
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'Content-Type: application/json',
      'Authorization: Bearer API_KEY'
  ]);

  $response = curl_exec($ch);
  curl_close($ch);

  echo json_encode(json_decode($response), JSON_PRETTY_PRINT);
  ```
</RequestExample>

<ResponseExample>
  ```javascript 200: Success theme={"system"}
  {
      "id": "1167335b-6c37-4fc6-ab8a-044e0005d335-jpeg",
      "url": "https://images.ayrshare.com/q3Ls85VTsrbODnGIJHpy7PaHWwA3/1167335b-6c37-4fc6-ab8a-044ed885d.jpeg",
      "fileName": "fun.jpg",
      "description": "good times"
  }
  ```

  ```json 400: Bad Request Error in upload theme={"system"}
  {
    "action": "request",
    "status": "error",
    "code": 101,
    "message": "Missing or incorrect parameters. Please verify with the docs. .../ayrshare.com/rest-api/endpoints"
  }
  ```
</ResponseExample>
