O File do Django tem os seguintes atributos e métodos:
O caminho absoluto do arquivo no sistema de arquivos
Sistemas de armazenamento de arquivos personalizados podem não gravar arquivos localmente; arquivos gravados nesses sistemas terão o path com valor None.
A URL onde o arquivo pode ser obtido. Isso é frequentemente útil em templates; por exemplo, um snippet de um template para exibir um Car (veja abaixo) poderia ser assim:
<img src='{{ car.photo.url }}' alt='{{ car.name }}' />
Abre ou reabre o arquivo (que por definição também faz um File.seek(0)). O argumento mode segue os mesmos valores do open() padrão do Python.
Ao reabrir um arquivo, o mode irá sobrescrever o modo com quem o arquivo foi originalmente aberto; None significa reabrir no modo original.
Itera sobre o arquivo retornando "pedaços" de um dado tamanho. O padrão para chunk_size é 64 KB.
Isto é especialmente útil com arquivos muito grandes, desde que os permitem serem enviados por stream para o disco, evitando o armazenamento de todo o arquivo na memória.
Qualquer File que esteja associado com um objeto (como o Car.photo, no exemplo acima) irá ter algums métodos extras:
Salva um novo arquivo com o nome de arquivo e conteúdo fornecidos. Não irá substituir o arquivo original, mas criar um novo arquivo e atualizar o objeto para apontar pra ele. Se save é True, o método save() do modelo irá ser chamado assim que o arquivo é salvo. Assim, essas duas linhas:
>>> car.photo.save('myphoto.jpg', contents, save=False)
>>> car.save()
são o mesmo que essa única linha:
>>> car.photo.save('myphoto.jpg', contents, save=True)
Note que o argumento content deve ser uma instância da classe File ou uma subclasse de File.
Jul 29, 2009