Pergunta

Em jogo framework, é possível rejeitar um campo

filledForm.reject("myField", "You are missing files");
return badRequest(myform.render(filledForm));

sem recarregar a página?

Eu tenho um arquivo do campo de entrada o que permite aos usuários selecionar os arquivos.Sobre a rejeitar e recarregar os arquivos são compensados e o erro é exibido.Eu quero os arquivos selecionados para estar lá

Comportamento atual:Antes de submeter o formulário:

Before

Após o envio (com o erro:arquivos sumiram)

Before

Foi útil?

Solução

Arquivo selecione os campos de entrada (i.e. <input type="file" ... />) são diferentes de outros campos de entrada -- você não pode pré-preencher o valor do lado do servidor.Seria uma enorme brecha de segurança se você poderia pensar em <input type="file" value="/etc/passwd" .. />).No servidor, quando você obter o formulário enviado, você não receba o caminho completo para o arquivo que foi carregado, apenas o nome do arquivo e o conteúdo.

Se você realmente precisa para preservar o valor do seu arquivo do campo de entrada, você precisará ir para um caminho diferente:enviar o formulário via Ajax (google por "ajax upload de arquivo" para algumas técnicas e bibliotecas para ajudar com isso), e usar o Ajax resposta para indicar se o arquivo foi válido ou não.


Mais esclarecimentos:Com o HTML normal/método HTTP post (que o Jogo de formas auxiliares para usar), que a página original se foi, e a resposta do servidor é uma nova página com ligação para a página anterior.O Jogo formulários auxiliares preencherá automaticamente os campos de entrada sobre esta página com os valores anteriores, mas, como explicado acima, isso não é possível para um arquivo do campo de entrada.

É por isso que existem finalidade especial de bibliotecas Javascript para upload de arquivos.Se o formulário está principalmente preocupado em fazer o upload de arquivos, você deve olhar para estes.(e.g. http://fineuploader.com).No lado do servidor, o destino do Ajax consulta será uma nova Ação que apenas processa os arquivos carregados e retorna uma mensagem de sucesso/fracasso, o que seria, em seguida, exibir para o usuário.

Outras dicas

Se o servidor seria capaz de manipular o valor de um campo do arquivo, que seria um grande risco de segurança, como poderíamos tomar qualquer arquivo do usuário da unidade de disco rígido.Se olharmos para os dois requisitos que você tem,

  • Obter o conteúdo do arquivo no servidor
  • Não perturbe INTERFACE do usuário do cliente estado

a única opção é usar um AJAX uploader de arquivos.Assim, o fluxo torna-se agora:

  • Envie o arquivo através de AJAX upload
  • Validar o conteúdo
  • Salve o arquivo para recuperação posterior
  • Enviar de volta o status (OK ou Erro)
  • Apresentar o erro em Erro
  • Depois de todo o formulário é submetido, procure o arquivo salvo anteriormente

Provavelmente, você pode enganar um pouco, se você não mente a carga apenas fazer a validação com AJAX para exibir a mensagem de erro e permitir que o arquivo seja carregado novamente em um normal em enviar.

É tudo sobre como trabalhar com os limites que temos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top