1. rebel

    10.07.2008 11:19

    Пишу загрузку файлов. Если файл с таким именем есть, но он перезаписывается, а если нету, то просто сохраняется:
    def iconupload(request, profile):
    "Allow to upload icon "

    if request.method == 'POST':
    form = IconUploadForm(request.POST, request.FILES)

    if form.is_valid():
    if form.cleaned_data.get('file'):

    file = form.cleaned_data['file']
    file.filename = 'id_%d.png' % (profile.id)

    f = profile._meta.get_field('uploaded_icon')
    if profile.uploaded_icon is None:
    f.save_form_data(profile, file)
    else:
    fd = open('%s/%s/id_%d.%s' % (settings.MEDIA_ROOT, f.upload_to, profile.user_id, settings.ICON_FORMAT.lower()), 'wb')
    fd.write(file.data)
    fd.close()

    profile.save()

    return HttpResponseRedirect('/upload/successfull/')
    else:
    form = IconUploadForm()
    return render_to_response(request, 'iconupload.html', { 'form': form,
    'icon_height': settings.ICON_HEIGHT,
    'icon_width': settings.ICON_WIDTH,
    'icon_format': settings.ICON_FORMAT.lower(),
    'icon_size': settings.ICON_SIZE / 1024,
    })
    Но когда я пытаюсь взять содержимое файла file.data , то оно почему то пустое. Поскажите, пожалуйста, что я делаю не так?
  2. Иван Сагалаев

    10.07.2008 12:50

    Ваш file:

    file = form.cleaned_data['file']
    

    это такой враппер, хранящий оригинальное имя файла и файл. Его .data — это уже настоящий UploadedFile, у которого можно попросить контент. Соответственно нужно:

    fd.write(file.data.data)
    

    P.S. Написал в django-developers, что надо бы этот враппер убрать, всем мешает.

  3. rebel

    10.07.2008 16:41

    Выяснилось по поводу переписанного аплоадинга. Из за этого все и было плохо. Уже все поремонтилось
  4. Иван Сагалаев

    10.07.2008 23:09

    А в django-developers сказали, что уже все починили недавно в рамках общего причесывания интерфейса UploadedFile: http://code.djangoproject.com/ticket/7614

  5. Boo

    11.07.2008 17:22

    А в django-developers сказали, что уже все починили недавно в рамках общего причесывания интерфейса UploadedFile
    И сломали тем самым валидацию: http://code.djangoproject.com/ticket/7673
    И уже несколько дней чинить не хотят. Может быть Вы как-то поспособствуете?
  6. Иван Сагалаев

    11.07.2008 17:38

    Да чего уж там способствовать... Несколько дней — не деньги. Пофиксят.

bbcode