Estou desenvolvendo um script simples para fazer upload de um arquivo através do AJAX, mas após o envio do formulário, a variável $ _FILES está completamente vazia, embora o arquivo exista dentro do php: // input, mas sem uma maneira simples de extrair apenas o arquivo. Alguém sabe o motivo e / ou solução para este problema?
Verifiquei todas as soluções comuns. enctype = direitos "multipart / form-data" para form-tags de pasta temporária fechando aspas duplas e a saída do arquivo de entrada em JS
Nada resolveu meu problema.
VERMELHO NÃO é jquery, e não encontrei uma duplicata em 24h. Portanto, não marque como duplicado, a menos que tenha certeza de que é um.
HTML
<form action="upload.php" method="POST" enctype="multipart/form-data" id="testf">
<input type="file" name="file" accept=".jpg">
<input type="submit" value="Skicka">
</form>
JavaScript
let data = document.querySelector("#testf");
data.onsubmit = function() {
var http = new XMLHttpRequest();
http.open("upload.php", data.action);
http.onreadystatechange = function () {
console.log(http.response);
}
http.setRequestHeader("Content-type", data.enctype);
http.send(new FormData(data));
event.preventDefault();
return false;
}
PHP
<?php
var_dump($_FILES);
?>
Isso deve imprimir o conteúdo do meu arquivo, mas
array(0) {}
é tudo que eu consigo. A carga útil do pedido é:
------WebKitFormBoundaryZVGq8suqFUUSFDtW
Content-Disposition: form-data; name="file"; filename="david.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryZVGq8suqFUUSFDtW--
Você tem um problema com o método XMLHttpReqest do JavaScript. Leva pelo menos dois parâmetros: Método e url. Os parâmetros completos são: método, url, async, usuário, senha
Altere seu código de:
http.open("upload.php", data.action);
Para:
http.open("post", data.action );
Atualizar: Remover também
http.setRequestHeader("content-type", "multipart/form-data")
Os dados do formulário já definem seus cabeçalhos para o tipo de conteúdo.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras