finished sorry, I clone the new source( for review) but use an old source on python environment
在 2012年8月21日星期二UTC+8下午6时36分46秒,软刀写道: > > > I now work with mongoengine, mongoForm > and set this in setting.py > DEFAULT_FILE_STORAGE = 'mongoengine.django.storage.GridFSStorage' > > I need to upload a picture, and I wrote a form like this: > > from django.forms import ImageField > > from mongoforms import MongoForm > from documents import UserProfile > > class ProfileForm(MongoForm): > photo = ImageField() > class Meta: > document = UserProfile > exclude = ('user', 'photo') > > but I get a Invalid Image Error when I submit a picture( how ever, it's ok > when I use PIL.Image.open(photo).verify() ) > I review the code, and found the exception was raise on > django.forms.fields.ImageField.to_python method > code snippet for to_python method: > def to_python(self, data): > .... > if hasattr(data, 'temporary_file_path'): > file = data.temporary_file_path() > .... > try: > Image.open(file).verify() > except ImportError: > raise > except Exception: # Python Imaging Library doesn't recognize it as > an image > raise ValidationError(self.error_messages['invalid_image']) > ... > > well, I don't know well to set temporary_file_path and how to > storage it with mongoengine.django.storage.GridFSStorage > > > # this was snippet for class ImageField > def to_python(self, data): > """ > Checks that the file-upload field data contains a valid image > (GIF, JPG, > PNG, possibly others -- whatever the Python Imaging Library > supports). > """ > f = super(ImageField, self).to_python(data) > if f is None: > return None > > # Try to import PIL in either of the two ways it can end up > installed. > try: > from PIL import Image > except ImportError: > import Image > > # We need to get a file object for PIL. We might have a path or we > might > # have to read the data into memory. > if hasattr(data, 'temporary_file_path'): > file = data.temporary_file_path() > else: > if hasattr(data, 'read'): > file = StringIO(data.read()) > else: > file = StringIO(data['content']) > > try: > # load() could spot a truncated JPEG, but it loads the entire > # image in memory, which is a DoS vector. See #3848 and #18520. > # verify() must be called immediately after the constructor. > Image.open(file).verify() > except ImportError: > # Under PyPy, it is possible to import PIL. However, the > underlying > # _imaging C module isn't available, so an ImportError will be > # raised. Catch and re-raise. > raise > except Exception: # Python Imaging Library doesn't recognize it as > an image > raise ValidationError(self.error_messages['invalid_image']) > if hasattr(f, 'seek') and callable(f.seek): > f.seek(0) > return f > > > > > this was exception stack > > Environment: > > > Request Method: POST > Request URL: http://localhost:8000/accounts/profile/ > > Django Version: 1.4 > Python Version: 2.7.3 > Installed Applications: > ['django.contrib.auth', > 'django.contrib.contenttypes', > 'django.contrib.sessions', > 'django.contrib.messages', > 'django.contrib.staticfiles', > 'registration', > 'bussiness', > 'accounts', > 'debug_toolbar'] > Installed Middleware: > ['django.middleware.common.CommonMiddleware', > 'django.contrib.sessions.middleware.SessionMiddleware', > 'django.middleware.csrf.CsrfViewMiddleware', > 'django.contrib.auth.middleware.AuthenticationMiddleware', > 'django.contrib.messages.middleware.MessageMiddleware', > 'debug_toolbar.middleware.DebugToolbarMiddleware'] > > > Traceback: > File > "/home/yan/env/haoyoubang/local/lib/python2.7/site-packages/django/core/handlers/base.py" > > in get_response > 111. response = callback(request, > *callback_args, **callback_kwargs) > File > "/home/yan/env/haoyoubang/local/lib/python2.7/site-packages/django/contrib/auth/decorators.py" > > in _wrapped_view > 20. return view_func(request, *args, **kwargs) > File "/home/yan/git/haoyoubang/accounts/views.py" in profile > 31. processFile(request.FILES['photo']) > File "/home/yan/git/haoyoubang/accounts/views.py" in processFile > 21. s = f.clean(photo) > File > "/home/yan/env/haoyoubang/local/lib/python2.7/site-packages/django/forms/fields.py" > > in clean > 535. return super(FileField, self).clean(data) > File > "/home/yan/env/haoyoubang/local/lib/python2.7/site-packages/django/forms/fields.py" > > in clean > 153. value = self.to_python(value) > File > "/home/yan/env/haoyoubang/local/lib/python2.7/site-packages/django/forms/fields.py" > > in to_python > 593. raise > ValidationError(self.error_messages['invalid_image']) > > Exception Type: ValidationError at /accounts/profile/ > Exception Value: > [u'\u8bf7\u4e0a\u4f20\u4e00\u5f20\u6709\u6548\u7684\u56fe\u7247\u3002\u60a8\u6240\u4e0a\u4f20\u7684\u6587\u4ef6\u4e0d\u662f\u56fe\u7247\u6216\u8005\u662f\u5df2\u635f\u574f\u7684\u56fe\u7247\u3002'] > > > > > > thank you !! > -- You received this message because you are subscribed to the Google Groups "Django users" group. To view this discussion on the web visit https://groups.google.com/d/msg/django-users/-/LQo7laGp4RUJ. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.