2009-08-19 5 views
1

Je fais face à des fichiers assez volumineux que je ne peux pas télécharger via http, mes utilisateurs téléchargent donc des fichiers via FTP que mon code doit ensuite déplacer dans FileField.upload_to (où ils normalement finir quand téléchargé via HTTP). Mon problème est la méthode couramment suggéré d'utiliser django.core.files.File:Évitez de copier lors de l'ajout d'un fichier volumineux à FileField

from django.core.files import File 

# filename is a FileField 
file_obj = MyModel(filename=File(open('VIDEO_TS.tar', 'rb'))) 

conduit à la copie des données que je dois éviter. Est-il possible d'ajouter le fichier déjà existant à un FileField tout en s'assurant que upload_to est appelé?

Répondre

0

Je dirais que la façon la plus simple serait d'écrire votre propre champ ou votre propre espace de stockage.

3

un peu en retard, mais:

class _ExistingFile(UploadedFile): 
    """ Utility class for importing existing files to FileField's. """ 

    def __init__(self, path, *args, **kwargs): 
     self.path = path 
     super(_ExistingFile, self).__init__(*args, **kwargs) 

    def temporary_file_path(self): 
     return self.path 

    def close(self): 
     pass 

    def __len__(self): 
     return 0 
utilisation

:

my_model.file_field.save(upload_to, _ExistingFile('VIDEO_TS.tar')) 
+0

merci, je vais essayer quand je reçois à mon code –

Questions connexes