4
respostas

Aplicação web - executar comando no terminal

Bom dia pessoal, estou com o seguinte cenário na minha aplicação web: O browser executa uma requisição para o servidor. A resposta do servidor é um arquivo texto para o cliente porém em seguida é necessário executar um comando pelo terminal do lado cliente para enviar o arquivo para impressora (térmica). Infelizmente esses arquivos para impressão são executados por outro software instalado localmente, portanto este tem permissão para executar o terminal. Não estou vendo outra forma se não o browser chamar o terminal para executar o comando. Por questões de segurança, achei que, de cara, é impossível. Existe possibilidade do navegador conseguir executar um comando através do terminal do cliente? Usando alguma autenticação etc.

4 respostas

Olá Bruno, dá uma olhada na API => https://developer.mozilla.org/en-US/docs/Web/API/File_and_Directory_Entries_API

Ela permite que seu JavaScript acesse o FileSystem. Outra opção (mais antiga) seria utilizar Applets, mas deixaria como última opção.

Se quiser enviar mais detalhes do problema ajudaria pra tentar te ajudar melhor.

Att.

Olá Eduardo obrigado pela resposta. Vou dar uma lida sobre esta API.

Um pouco mais de detalhes, o cliente precisa imprimir umas etiquetas numa impressora específica. Atualmente eles usam um software de impressão que por trás executa o comando usando o terminal da máquina dele (comando no DOS).

Aqui no meu caso como o software é web, ou seja, não instalamos nada na máquina dele, precisaria que o navegador executasse esse comando de impressão de forma similar. Não sei se seria possível, mas tentei usar uns pacotes do nodeJS, porém sem sucesso, pois nosso front-end foi feito em cima do Angular 4. Em resumo o navegador executaria pra gente o comando que ele precisa pelo terminal. Não sei se ajudou a explicação. mas seria isso.

Obrigado novamente pela ajuda,

olá Bruno, realmente executar comandos JavaScript no browser acionando algo na máquina do usuário pode ser bem complicado mesmo.

Não tenho certeza de que haja uma boa solução para isto. O link abaixo tem uma boa discussão sobre isto:

https://stackoverflow.com/questions/1880198/how-to-execute-shell-command-in-javascript

Se nada funcionar vc pode tentar deixar um processo rodando na máquina de cada usuário, escutando numa porta TCP, por exemplo. Desta forma o cliente (sua aplicação Angular) pode fazer uma requisição para http://localhost:porta passando alguns parâmetros. Este processo simplesmente executaria o que for necessário, que no caso aqui seria imprimir (iteragir com a impressora).

Entendo que esta última solução seria em último caso. Este "daemon" poderia ser desenvolvido em qualquer linguagem de backend (Java, C, C++, Node, etc).

Boa sorte.

Eduardo obrigado pela ajuda. Pode ser a solução mesmo deixar um servidor local rodando.

Valeu mesmo a ajuda! abraço