Saya masih mencoba untuk membungkus kepala saya di sekitarnya.
Saya dapat meminta pengguna memilih file (atau bahkan banyak) dengan input file:
<form>
<div>
<label>Select file to upload</label>
<input type="file">
</div>
<button type="submit">Convert</button>
</form>
Dan saya bisa menangkap submit
acara menggunakan <fill in your event handler here>
. Tapi begitu saya lakukan, bagaimana cara mengirim file menggunakan fetch
?
fetch('/files', {
method: 'post',
// what goes here? What is the "body" for this? content-type header?
}).then(/* whatever */);
javascript
fetch-api
Deitch
sumber
sumber
Content-Type: multipart/form-data
dalam header permintaanJawaban:
Ini adalah contoh dasar dengan komentar. The
upload
Fungsi adalah apa yang Anda cari:sumber
Saya sudah melakukannya seperti ini:
sumber
FormData
objek jika semua yang Anda unggah adalah file (yang diinginkan pertanyaan aslinya).fetch
akan menerima diinput.files[0]
atas sebagaibody
parameternya.Catatan penting untuk mengirim File dengan Ambil API
Orang harus menghilangkan
content-type
tajuk untuk permintaan Ambil. Kemudian browser akan secara otomatis menambahkanContent type
header termasuk Form Boundary yang terlihat sepertiBatas bentuk adalah pembatas untuk formulir data
sumber
Jika Anda ingin banyak file, Anda dapat menggunakan ini
sumber
Untuk mengirimkan file tunggal, Anda hanya dapat menggunakan
File
objek dariinput
's.files
array yang langsung sebagai nilaibody:
di Andafetch()
initializer:Ini berfungsi karena
File
mewarisi dariBlob
, danBlob
merupakan salah satuBodyInit
jenis yang diizinkan yang didefinisikan dalam Standar Ambil.sumber
body: myInput.files[0]
menyebabkan jumlah byte yang disimpan dalam memori di sisi klien?express-fileupload
gagal mem-parsing aliran permintaan. TetapiFormData
bekerja seperti pesona.express-fileupload
adalah pustaka serveride untuk menanganimultipart/form-data
permintaan yang berisi file, jadi ya, itu tidak kompatibel dengan pendekatan ini (yang langsung mengirim file sebagai badan permintaan).Jawaban yang diterima di sini sedikit tertanggal. Pada April 2020, pendekatan yang disarankan terlihat di situs web MDN menyarankan penggunaan
FormData
dan juga tidak meminta untuk mengatur jenis konten. https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_FetchSaya mengutip cuplikan kode untuk kenyamanan:
sumber
FormData
hanya akan berfungsi jika server mengharapkan data formulir. Jika server menginginkan file mentah sebagai isi POST, jawaban yang diterima benar.Melompat dari pendekatan Alex Montoya untuk beberapa elemen input file
sumber
Masalahnya bagi saya adalah bahwa saya menggunakan response.blob () untuk mengisi formulir data. Tampaknya Anda tidak bisa melakukan itu setidaknya dengan reaksi asli jadi saya akhirnya menggunakan
Ambil tampaknya mengenali format itu dan mengirim file ke mana uri menunjuk.
sumber
Ini kode saya:
html:
sumber