Bom dia a todos.
Em uma aplicação “Controle”, preciso fazer o upload de um arquivo para uma determinada pasta no servidor.
Criei duas aplicações de controle. Uma que contém o formulário de entrada dos dados e outra que recebe os dados informados no formulário.
No formulário da aplicação de entrada, criei um campo "Document (File name), que permite a escolha do arquivo que desejo enviar para o servidor. Entretanto, na aplicação que recebe os dados informados no formulário, não sei como nem onde encontrar o arquivo que escolhi e como salvá-lo na pasta de destino.
Antecipadamente, agradeço a ajuda.
Renato.
o arquivo somente sera salvo permanentemente após submeter o formulário.
a pasta do arquivo é a informado no momento da publicação.
Haroldo:
Antes de tudo, agradeço pela resposta e pela atenção.
Não entendi muito bem a sua resposta.
Quer dizer que o funcionamento do software é diferente em ambiente de produção e depois do projeto publicado?
Preenchi o parâmetro “Subdiretório” do campo do arquivo de informação do arquivo de upload mas, mesmo depois de submetido o formulário, o arquivo que escolho não é salvo na pasta previamente definida. Tentei colocar o nome relativo da pasta e também o nome absoluto, mas em nenhum dos casos tive sucesso.
Por exemplo:
“./…/arquivos/upload”
ou
“./…/arquivos/upload/”
ou
“C:/Program Files (x86)/NetMake/v81/wwwroot/scriptcase/app/Modelos/arquivos/upload”
ou
“C:/Program Files (x86)/NetMake/v81/wwwroot/scriptcase/app/Modelos/arquivos/upload/”
Em nenhum dos casos acima, o arquivo foi salvo.
Renato.
sim, ambiente de produção e desenvolvimento são distintos, em produção você pode estar em um linux e em desenvolvimento no windows, por isso quando publica a aplicação vc informa as pastas de upload de documentos ou de imagens ( se não informar serão usadas a padrão do sc).
voce só terá acesso ao aquivo após submeter o formulário (evento onvalidatesucess e acho que nos eventos onafter… em caso de formulários).
uma forma de capturar o caminho da pasta é usando propriedades internas do sc:
se não me engano: $this->Ini->path_doc e $this->Ini->path_imagens. Dessa forma vai funcionar em desenvolvimento e produção.
para capturar o arquivo logo apos o upload sem submeter o formulário o sc salva o arquivo em: $this->Ini->path_imag_temp mas com um nome que não sera reconhecido por você, após a submissão do formulário (clicar no ok em app controle, ou em inserir ou alterar em app formulário) o sc renomeia o aquivo temporário que acabou de subir para o nome definitivo que se encontra no {campo} do upload.
Nunca estudei uma forma de tentar pegar o nome temporário que sc utiliza logo após o upload se submeter o formulário.
Eu estou tendo um problema similar.
Fiz a aplicação de controle para ler o conteúdo de um arquivo e salvar no banco de dados, mas quando seleciono o arquivo ele não fica disponível, no ambiente de desenvolvimento que é em Windows funciona perfeitamente, mas quando publico no Linux não funciona. As aplicações de formulário funcionam o carregamento do arquivo, apenas nessa que é de controle que não funciona.
Na aplicação de controle, tem apenas um campo virtual para o carregamento do arquivo com o tipo Documento (Nome do arquivo) e dentro de Eventos a opção onValidate é onde tenho a lógica para ler o arquivo carregado no campo virtual.
O Problema está que o arquivo não está sendo carregado, ele aparece o nome lá mas não carrega (normalmente ele fica como se tivesse um link)
Alguém já passou por isso?
E a resposta dada dia 21/11/2016 não contribui para explicar o funcionamento do upload?
** Aproveitando…
O Sr RenatoRB, postou seu problema, demos a ele respostas plausíveis com texto até longo, e nunca mais se manifestou no tópico. Isso é desestimula o desejo de continuar ajudando aqui. Juntando a esse são incontáveis posts de ajuda onde não há feedback de quem pede a ajuda. Vou começar a montar uma lista negra de membros que tem esse tipo de comportamento e outros também nada desejáveis para quando postarem dúvidas eu já saber que nem devo responder.
Boa tarde Haroldo,
Meu problema não é saber o caminho, pois pego o caminho das variáveis globais, a questão é que por algum motivo ele não está carregando o arquivo.
Quando é um formulário ele carrega e salva normalmente, mas nessa aplicação de controle não está fazendo isso, ele aparece a barra de progresso, o nome do arquivo fica na tela, mas parece que ele não pega esse nome como valor da variável {Import} que é o nome do campo.
Mas isso só está acontecendo em produção no Linux, pois em desenvolvimento no meu computador Windows isso funciona.
Veja abaixo inicio do código em Eventos -> onValidate
if({Import} == false){
echo “Arquivo não enviado”;
die;
}
$arquivo_obj = fopen($_SESSION[‘scriptcase’][‘import_arq_febraban’][‘glo_nm_path_doc’].’/’.{Import}, ‘r’);
E com relação a resposta que você mencionou não sei onde localizar aqueles caminhos ($this->Ini->path_doc e $this->Ini->path_imagens. Dessa forma vai funcionar em desenvolvimento e produção.)
Como foi dito ambiente de produção e de desenvolvimento são distintos.
Tem que ver se o arquivo esta sendo criado no diretório temporário do ambiente de produção, se estiver o que deve estar ocorrendo é que o sc não esta conseguindo copiar do diretório temporário para o definitivo (determinado no momento da publicação da aplicação), motivo??? pode ser permissão na pasta destino.
O problema é que nem para a pasta temporária ele está copiando que fica em /var/www/html/gti/_lib/tmp
as permissões da pasta estão com 777 recursivo e o dono e grupo é apache.
obs: gti é o nome da aplicação
Quanto ao upload do arquivo consegui resolver, na verdade não era no Scriptcase e nem permissões do Linux e sim a limitação que estava no PHP para fazer upload, o arquivo que eu estava tentando subir era de 6M mas o php estava limitado em 2M então eu editei o arquivo /etc/php.ini e alterei as linhas abaixo:
post_max_size = 10M (antes estava 8M)
upload_max_filesize = 10M (antes estava 2M)
Haroldo, vc saberia me dizer se encontrou uma forma de pegar o arquivo com esse nome estranho na pasta: $this->Ini->path_imag_temp
No tmp nunca tentei.