Impede que o arquivo seja acessado enquanto está sendo carregado

4

Se eu enviasse um arquivo grande para um servidor FTP, esse arquivo apareceria imediatamente no sistema de arquivos de destino e poderia ser acessado por outra parte antes da conclusão da transferência?

Em caso afirmativo, quais são alguns métodos para evitar que o arquivo seja lido até que a transferência seja concluída?

    
por yogibear 20.02.2015 / 16:36

3 respostas

3

Isso dependerá inteiramente do seu comportamento específico de implementações de servidor, e não está totalmente definido em RFC959 .

Em geral, um arquivo não está disponível no servidor até que seu upload retorne um 226 e seu status seja 150. Se o arquivo ainda não tiver sido totalmente carregado, sua resposta de status não será 550, e não será transferir o arquivo para o cliente.

Para fazer isso, o verbo STOU saberá que o upload de um arquivo está completo quando o byte EOF chegar, então nesse ponto todo o arquivo foi carregado, então ele retorna 226.

O verbo RECV retornará primeiro o status do arquivo solicitado. uma resposta de 150 é esperada se o arquivo estiver em um status aceitável e iniciará a transferência.

Além disso, lembre-se de que a maioria dos serviços do servidor é implementada como aplicativos multithread e a segurança do thread para arquivos geralmente depende do sistema de arquivos e bloqueios do sistema operacional do servidor nos arquivos. Na maioria das plataformas, quando um arquivo está sendo gravado ativamente, outros encadeamentos não podem ler ou gravar nesse arquivo, até que o bloqueio seja liberado.

    
por 20.02.2015 / 17:03
2

Em teoria, o servidor FTP pode impedir que o arquivo enviado seja acessado por outros processos ou outras conexões FTP.

Na prática, isso não está acontecendo nos servidores * nix. Eu testei isso no CentOS com PureFTPD e ProFTPD (os servidores FTP * nix mais utilizados). Com ambos os servidores, nada impede que você baixe um arquivo incompleto.

Por outro lado, o servidor FTP do Windows IIS bloqueia o arquivo carregado. Testado no IIS 6.2 (Windows 8.1).

Para obter uma solução alternativa, consulte minha resposta em Os uploads do FileZilla não são atômicos .

    
por 20.02.2015 / 17:30
2

Se o seu servidor de FTP permitir um recurso semelhante aos Hidden Stores do ProFTPD, você pode querer testá-lo.

The HiddenStores directive enables two-step file uploads: files are uploaded as ".in.filename." and once the upload is complete, renamed to just "filename". This provides a degree of atomicity and helps prevent 1) incomplete uploads and 2) files being used while they're still in the progress of being uploaded.

Fonte: link

    
por 25.07.2016 / 12:55

Tags