2012-04-10 2 views
2

как Джанго upload_toКак использовать Джанго-FileBrowser переименовать файл перед загрузкой его в папку

def upload_to(instance, filename): 
    filename = time.strftime('%Y%m%d%H%M%S') 
    ym = time.strftime('%Y%m') 
    return 'uploads/%s/%s.jpg' % (ym,filename) 

class Person(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 
    photo = models.ImageField(u"Image (Upload)",upload_to=upload_to) 

файла спасется загрузка /% s /% s.jpg '

но изменить для

photo = FileBrowseField("Image", max_length=200, directory="uploads/", extensions=[".jpg"], blank=True, null=True) 

Как переименовать файл перед загрузкой его в папку как Джанго upload_to

+0

Возможный дубликат [Использовать уникальные имена файлов для загрузки с помощью django?] (Http://stackoverflow.com/questions/2673647/enforce-unique-upload-file-names-using-django) – Nix

ответ

1

В FileBrowser/sites.py вы можете создать крюк для этого при загрузке/Обработка загрузки:

def _upload_file(self, request): 
    """ 
    Upload file to the server. 
    """ 
    if request.method == "POST": 
     folder = request.GET.get('folder', '') 

     if len(request.FILES) == 0: 
      return HttpResponseBadRequest('Invalid request! No files included.') 
     if len(request.FILES) > 1: 
      return HttpResponseBadRequest('Invalid request! Multiple files included.') 

     filedata = list(request.FILES.values())[0] 

     fb_uploadurl_re = re.compile(r'^.*(%s)' % reverse("filebrowser:fb_upload", current_app=self.name)) 
     folder = fb_uploadurl_re.sub('', folder) 

     path = os.path.join(self.directory, folder) 
     # we convert the filename before uploading in order 
     # to check for existing files/folders 
     file_name = convert_filename(filedata.name) 
     filedata.name = file_name 
     file_path = os.path.join(path, file_name 
     .... 

Вы можете изменить FILE_PATH здесь, чтобы все, что вам нравится, или изменить имя файла.

Для тех из вас, которые просто хотят, чтобы убедиться, что файлы не будут перезаписаны, вы можете установить флаг FILEBROWSER_OVERWRITE_EXISTING в вашем settings.py как таковой:

FILEBROWSER_OVERWRITE_EXISTING = False 

Это гарантирует, что при редактировании файлов вы дать им уникальное имя, а также обеспечить, чтобы новые загрузки отображали свое имя файла в нечто уникальное, используя метод filesbrowsers convert_filename, определенный в файлеbrowser/utils.py

Подробнее о настройках файлового браузера here. Надеюсь, это поможет :)