Quero implementar um upload de arquivo simples na minha página da intranet, com a menor configuração possível.
Esta é a minha parte HTML:
<input id="sortpicture" type="file" name="sortpic" />
<button id="upload">Upload</button>
e este é o meu script JS jquery:
$("#upload").on("click", function() {
var file_data = $("#sortpicture").prop("files")[0];
var form_data = new FormData();
form_data.append("file", file_data);
alert(form_data);
$.ajax({
url: "/uploads",
dataType: 'script',
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post',
success: function(){
alert("works");
}
});
});
Há uma pasta chamada "uploads" no diretório raiz do site, com permissões de alteração para "usuários" e "IIS_users".
Quando seleciono um arquivo com o formulário e pressiono o botão de upload, o primeiro alerta retorna "[object FormData]". o segundo alerta não é chamado e a pasta "uploads" também está vazia !?
Alguém pode ajudar a descobrir o que está errado?
Além disso, o próximo passo deve ser: renomear o arquivo com um nome gerado no servidor. Talvez alguém possa me dar uma solução para isso também.
Respostas:
Você precisa de um script que seja executado no servidor para mover o arquivo para o diretório de uploads. O jQuery
ajax
método (em execução no navegador) envia os dados do formulário para o servidor e, em seguida, um script no servidor lida com o upload. Aqui está um exemplo usando PHP.Seu HTML está correto, mas atualize seu script JS jQuery para que fique assim:
E agora para o script do lado do servidor, usando PHP neste caso.
upload.php : um script PHP executado no servidor e direciona o arquivo para o diretório de uploads:
Além disso, algumas coisas sobre o diretório de destino:
E um pouco sobre a função PHP
move_uploaded_file
, usada no script upload.php :$_FILES['file']['name']
é o nome do arquivo conforme ele é carregado. Você não precisa usar isso. Você pode dar ao arquivo qualquer nome (compatível com o sistema de arquivos do servidor) que desejar:E, finalmente, esteja ciente de seus valores de configuração PHP
upload_max_filesize
ANDpost_max_size
e certifique-se de que seus arquivos de teste também não excedam. Aqui estão algumas dicas de como verificar a configuração do PHP e como definir o tamanho máximo do arquivo e as configurações de postagem .fonte
form_data.append
função. Então, mudei o script PHP para refletir o novo nome de entrada do formulário. Também puxei a resposta do script PHP para o alerta de sucesso do ajax para ajudar na depuração.$_FILES['file']
fonte
fonte
e este é o arquivo php para receber os arquivos aplaudidos
fonte
if (true)
fazendo? Sempre avaliar como verdadeiro, é inútil, não é? Além disso, você tem um final extra encaracolado.Use js puro
O nome do arquivo é incluído automaticamente para solicitação e o servidor pode lê-lo, o 'tipo de conteúdo' é automaticamente definido como 'multipart / form-data'. Aqui está um exemplo mais desenvolvido com tratamento de erros e envio adicional de json
Mostrar snippet de código
fonte
Melhor Upload de Arquivo Usando o Jquery Ajax com Materialize Clique Aqui para Baixar
Quando você seleciona a imagem, a imagem será convertida na base 64 e você pode armazená-la no banco de dados para que também seja leve.
fonte