Wysyłanie plików w JSON

Wysyłanie plików w JSON
R9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 22
0

Cześć,
czy jest taka możliwość by POSTem wysłać json, który zabiera plik czy musi do być formData?
Chodzi mi o wysłanie takiego body np:
files: {
"file": tutaj plik do wysłania,
"fileName": "image1",
"extension": "png"
}

mr_jaro
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Grudziądz/Bydgoszcz
  • Postów: 5300
1

jeśli nie będzie duży możesz zamienić go na base64 i wtedy go wrzucić do jsona

Maciej Cąderek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1264
1

Tak jak @mr_jaro napisał - JSON to format tekstowy i nie przechowuje danych binarnych - jak chcesz nim przesłać plik to musisz go przekonwetować do odpowiedniego formatu, przykład:

Kopiuj
<form action="#" id="upload">
  <input type="file">
  <input type="submit" value="Upload">
</form>
Kopiuj
const toBase64 = file => new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = ({target}) => resolve(target.result);
    reader.onerror = error => reject(error);
});

document.getElementById("upload").addEventListener("submit", async (e) => {
  e.preventDefault();

  const file = e.target.children[0].files[0];
  const base64 = await toBase64(file)
  
  const nameChunks = file.name.split('.')
  
  const json = {
    name: nameChunks.slice(0, -1).join('.'),
    extension: nameChunks.slice(-1)[0],
    file: base64
  }
  
  console.log(json)
  
  // Send data...
});

Demo: CodePen

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.