Как загрузить файл с помощью JS fetch API?
Я все еще пытаюсь обернуть мою голову вокруг него.
Я могу заставить пользователя выбрать файл (или даже несколько) с помощью ввода файла:
<form>
<div>
<label>Select file to upload</label>
<input type="file">
</div>
<button type="submit">Convert</button>
</form>
и я могу поймать submit событие с помощью <fill in your event handler here>. Но как только я это сделаю, как отправить файл с помощью fetch?
fetch('/files', {
method: 'post',
// what goes here? What is the "body" for this? content-type header?
}).then(/* whatever */);
5 ответов:
Я сделал так:
var input = document.querySelector('input[type="file"]') var data = new FormData() data.append('file', input.files[0]) data.append('user', 'hubot') fetch('/avatars', { method: 'POST', body: data })
важное примечание для отправки файлов с помощью Fetch API
нужно опустить
content-typeзаголовок для запроса на выборку. Затем браузер автоматически добавитContent typeзаголовок, включая границу формы, которая выглядит какContent-Type: multipart/form-data; boundary=—-WebKitFormBoundaryfgtsKTYLsT7PNUVDграница формы является разделителем для данных формы
чтобы отправить один файл, вы можете просто использовать
Fileобъектinput' s.filesмассив непосредственно как значениеbody:в своемfetch()инициализатор:const myInput = document.getElementById('my-input'); // Later, perhaps in a form 'submit' handler or the input's 'change' handler: fetch('https://example.com/some_endpoint', { method: 'POST', body: myInput.files[0], });это работает, потому что
Fileнаследует отBlobиBlobявляется одним из допустимыхBodyInitтипы, определенные в стандарте выборки.