Eu ainda estou tentando envolver minha cabeça em torno disso.
Posso fazer com que o usuário selecione o arquivo (ou até vários) com a entrada do arquivo:
<form>
<div>
<label>Select file to upload</label>
<input type="file">
</div>
<button type="submit">Convert</button>
</form>
E eu posso pegar o submit
evento usando <fill in your event handler here>
. Mas quando eu faço, como envio o arquivo usando fetch
?
fetch('/files', {
method: 'post',
// what goes here? What is the "body" for this? content-type header?
}).then(/* whatever */);
javascript
fetch-api
deitch
fonte
fonte
Content-Type: multipart/form-data
no cabeçalho do pedidoRespostas:
Este é um exemplo básico com comentários. A
upload
função é o que você está procurando:fonte
Eu fiz assim:
fonte
FormData
objeto se tudo o que você estiver carregando for o arquivo (que é o que a pergunta original deseja).fetch
aceitaráinput.files[0]
acima comobody
parâmetro.Uma observação importante para o envio de arquivos com a API de busca
É necessário omitir o
content-type
cabeçalho da solicitação de busca. Em seguida, o navegador adicionará automaticamente oContent type
cabeçalho, incluindo o limite do formulário, que se parece comO limite do formulário é o delimitador para os dados do formulário
fonte
Se você deseja vários arquivos, pode usar este
fonte
Para enviar um único arquivo, você pode simplesmente usar o
File
objeto doinput
's.files
gama diretamente como o valorbody:
em suafetch()
initializer:Isso funciona porque
File
herda deBlob
eBlob
é um dosBodyInit
tipos permitidos definidos no padrão de busca.fonte
body: myInput.files[0]
causa a quantidade de bytes mantidos na memória no lado do cliente?express-fileupload
falha ao analisar o fluxo de solicitação. MasFormData
funciona como um encanto.express-fileupload
uma biblioteca do lado do servidor para lidar commultipart/form-data
solicitações que contêm arquivos, então sim, não é compatível com essa abordagem (que envia o arquivo diretamente como corpo da solicitação).A resposta aceita aqui é um pouco datada. Em abril de 2020, uma abordagem recomendada vista no site da MDN sugere o uso
FormData
e também não solicita a definição do tipo de conteúdo. https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_FetchEstou citando o trecho de código por conveniência:
fonte
FormData
só funcionará se o servidor estiver esperando dados do formulário. Se o servidor desejar um arquivo bruto como o corpo do POST, a resposta aceita estará correta.Partindo da abordagem de Alex Montoya para vários elementos de entrada de arquivo
fonte
O problema para mim era que eu estava usando um response.blob () para preencher os dados do formulário. Aparentemente, você não pode fazer isso pelo menos com o reagir nativo, então acabei usando
A busca parece reconhecer esse formato e enviar o arquivo para o qual a uri está apontando.
fonte
Aqui está o meu código:
html:
fonte