Pergunta

Estou construindo uma aplicação web que guia os meus utilizadores através da configuração e instalação de um aplicativo. Ele constrói um conjunto de arquivos de configuração dinamicamente, em seguida, envia-los em um (arquivo .ZIP) arquivo junto com um instalador para a aplicação. A página web é gerado a partir de um script shell linux (sorry), e por razões de segurança, eu prefiro o arquivo ser enviado diretamente do roteiro, e não como um link, para que o usuário não pode acessá-lo diretamente.

Aqui está o processo: Uma vez que o usuário inseriu algumas informações, e os arquivos foram gerados, eu quero exibir uma página com instruções, em seguida, iniciar o download automaticamente, sem pedir o usuário a clicar em um link "download deste arquivo" :

#!/bin/bash
echo_header_and_instructions         # Standard HTML
<Magic HTML tag to start transfer>   # ??? What goes here???
command_to_stream_the_files          # Probably 'cat'
echo_end_tags                        # End the page.

Obrigado por sua ajuda!

Foi útil?

Solução 3

Um amigo fornecido a mágica: usar um tag <iframe> para criar um quadro "invisível" que contém apenas o arquivo para download:

<iframe id="file_download" width="0" height="0" scrolling="no" 
   frameborder="0" src=/cgi-bin/my/scripts/sendfiles?file=$filename.zip>
   You need a browser that supports frames.
</iframe>`

Outras dicas

Você não pode realmente fazer isso, acho.
Você pode forçar o download do arquivo através dos seguintes cabeçalhos mas, tanto é que eu sei que você não pode misturar HTML e download do arquivo.

cabeçalhos:

Content-type: MIME/type
Content-Disposition: attachment; filename="archive.zip"
Content-Length: filesize_in_bytes

O comprimento de conteúdo não é obrigatório, mas usá-lo irá certificar-se de que a caixa de diálogo de download pode mostrar quanto mais arquivos que há para download.

Uma coisa que você poderia fazer é recarregar a página usando javascript. Como a página é um download de arquivo na página HTML original vai ficar no lugar:

<html>
<head>
<title>This is the page containing information</title>
<script type="text/javascript">
window.onload = function(){
 document.location = 'somefile.zip';
}
</script>
</head>
<body>
This page will stay visible while the file is being downloaded<br>
</body>
</html>

Eu acho que você pode fazer o navegador solicitará que o usuário baixar um arquivo usando o href="http://en.wikipedia.org/wiki/Meta_refresh" rel="nofollow noreferrer"> meta tag fazer uma atualização, mas como disse Pim Jager Eu não acho que você pode fazê-lo com uma transferência. Você poderia talvez tentar fazer algo como:

<meta http-equiv="refresh" content="5;url=http://example.com/pathtodownload.zip" />
scroll top