Я очень старался, но не смог. Я пытаюсь найти способ, как пользователь может загрузить свое изображение аватара, используя django, и это мой код:
settings.py
USER_IMAGE_PATH = '/site_media/user_data/images/'
models.py
fs = FileSystemStorage(location=settings.USER_IMAGE_PATH)
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
avatar = models.ImageField(storage=fs, upload_to=settings.USER_IMAGE_PATH)
forms.py
class ProfileForm(forms.Form):
avatar = forms.ImageField(label='avatar', required=False)
urls.py
(r'^profile/(\w+)/$', profile_form),
views.py
@login_required
def profile_form(request, username):
form = ProfileForm(request.POST, request.FILES)
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
raise Http404(u'User not Found')
if form.is_valid():
avatar = form.cleaned_data['avatar']
profile = user.get_profile()
profile.avatar = avatar
if not avatar:
pass
else:
image_file = request.FILES['avatar']
im = imageilb()
filename, content = im.handle_uploaded_image(image_file)
profile.avatar.save(filename, content)
imagelib.handle_uploaded_image ()
import hashlib
from PIL import Image
import os.path
import StringIO
import django
def handle_uploaded_image(self,i):
# resize image
imagefile = StringIO.StringIO(i.read())
imageImage = Image.open(imagefile)
(width, height) = imageImage.size
(width, height) = self.scale_dimensions(width, height, longest_side=240)
resizedImage = imageImage.resize((width, height))
imagefile = StringIO.StringIO()
resizedImage.save(imagefile,'JPEG')
filename = hashlib.md5(imagefile.getvalue()).hexdigest()+'.jpg'
# #save to disk - hardcoding of paths will be removed as soon as this thing works
imagefile = open(os.path.join('/site_media/user_data/images',filename), 'w')
resizedImage.save(imagefile,'JPEG')
imagefile = open(os.path.join('/site_media/user_data/images',filename), 'r')
return filename, django.core.files.File(imagefile)
С этим кодом поле в базе данных вставляется как путь к сохраненному изображению, правильно (хотя достаточно было бы просто указать имя файла изображения), но изображение не сохраняется там, где предполагается его сохранение или не сохранены вообще (я не могу быть уверен, что файл хранится где-то еще, поэтому я говорю это - хотя я проверял)
любой другой код будет добавлен по запросу.
Что я делаю не так?