2014-02-13 2 views
0

Мне нужно загрузить файл с Django и поместить его в папку пользователей с именем, генерируемой из файлов содержимого md5, как это:Джанго, model.FileFieldm загрузить на dynamicaly сгенерированного URL и изменить имя файла в зависимости от файла md5

hashlib.md5(open('filename.ext').read()).hexdigest() 
модель

файла:

class File(models.Model): 
    name = models.CharField(max_length=255, blank=False) 
    path = models.FileField(upload_to=get_file_path()) 
    user = models.ForeignKey('User') 

    def get_file_path(): 
     #get file, calculate users dir(something like settings.UPLOAD_DIR/user_id/), 
     #calculate files md5 and return generated path 

Как получить доступ только закачанный файл из get_file_path()?

ответ

0

Что-то вроде следующего должно вам начать работу:

from django.conf import settings 

hash_dir = hashlib.md5(open('filename.ext').read()).hexdigest() 

def get_file_path(*args): 
    """ 
     Creates path if does not exists and returns path 
     E.g. assign_path_to_folder(settings.MEDIA_ROOT, self.name, hash_dir) 
    """ 
    path_to_folder = os.path.join(*args) 
    if not os.path.exists(path_to_folder): 
     os.makedirs(path_to_folder) 
    return os.path.join(path_to_folder, '') 

Следующая создает папку, если она не существует, и возвращает абсолютный путь к папке (потому что MEDIA_ROOT должен быть абсолютный путь).

+0

А как получить доступ к только что загруженному файлу из get_file_path()? – Paul

+0

Это один файл, который всегда находится в одном месте? –

+0

Он всегда находится в том же месте, но мне нужно получить к нему доступ во время его загрузки и сохранения в памяти или во временном каталоге. Другими словами, мне нужно вычислить md5 файла, который уже загружен на сервер, но еще не сохранен в любом каталоге пользователя. – Paul

Смежные вопросы