#28170: FileField Upload Permissions Denied -------------------------------------+------------------------------------- Reporter: Derrick Jackson | Owner: nobody Type: Bug | Status: new Component: File | Version: 1.11 uploads/storage | Severity: Normal | Resolution: Keywords: | Triage Stage: | Unreviewed Has patch: 0 | Needs documentation: 0 Needs tests: 0 | Patch needs improvement: 0 Easy pickings: 0 | UI/UX: 0 -------------------------------------+------------------------------------- Changes (by Tim Graham):
* component: Core (Other) => File uploads/storage Old description: > I upgraded from DJango 1.10.6 to 1.11 and can no longer use FileField to > upload files larger than 2.5 MB. When an attempt is made to upload a > larger file I get the error below occurs. Please note if I downgrade to > 1.10.6 again the upload feature works just fine. > > Django Version: 1.11 > Exception Type: PermissionError > Exception Value: > [Errno 1] Operation not permitted > Exception Location: /usr/lib/python3.5/shutil.py in copystat, line > 195 > Python Executable: /usr/bin/python3 > Python Version: 3.5.2 > > Environment: > > Request Method: POST > Request URL: http://localhost:8000/orders/service/vpn/5/ > > Django Version: 1.11 > Python Version: 3.5.2 > Installed Applications: > ['django.contrib.auth', > 'django.contrib.contenttypes', > 'django.contrib.sessions', > 'django.contrib.sites', > 'django.contrib.messages', > 'django.contrib.staticfiles', > 'impersonate', > 'stronghold', > 'django.contrib.admin', > 'django.contrib.admindocs', > 'ajax_select', > 'django_object_actions', > 'ckeditor', > 'mail_templated', > 'administrative', > 'changes', > 'decommission', > 'ecm', > 'feedback', > 'file_manager', > 'gunicorn', > 'orders', > 'old_net_chg_req', > 'server_request', > 'security', > 'shared', > 'system', > 'utilities', > 'downtime', > 'debug_toolbar'] > Installed Middleware: > ('django.middleware.security.SecurityMiddleware', > 'django.contrib.sessions.middleware.SessionMiddleware', > 'django.contrib.auth.middleware.AuthenticationMiddleware', > 'shared.middleware.CustomDowntimeMiddleware', > 'stronghold.middleware.LoginRequiredMiddleware', > 'django.middleware.common.CommonMiddleware', > 'django.middleware.csrf.CsrfViewMiddleware', > 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', > 'shared.middleware.GlobalRequestMiddleware', > 'shared.middleware.UserTracebackMiddleware', > 'django.contrib.messages.middleware.MessageMiddleware', > 'impersonate.middleware.ImpersonateMiddleware', > 'django.middleware.clickjacking.XFrameOptionsMiddleware', > 'debug_toolbar.middleware.DebugToolbarMiddleware') > > > Traceback: > > File "/usr/local/lib/python3.5/dist- > packages/django/core/handlers/exception.py" in inner > 41. response = get_response(request) > > File "/usr/local/lib/python3.5/dist- > packages/django/core/handlers/base.py" in _legacy_get_response > 249. response = self._get_response(request) > > File "/usr/local/lib/python3.5/dist- > packages/django/core/handlers/base.py" in _get_response > 187. response = self.process_exception_by_middleware(e, > request) > > File "/usr/local/lib/python3.5/dist- > packages/django/core/handlers/base.py" in _get_response > 185. response = wrapped_callback(request, > *callback_args, **callback_kwargs) > > File "/vagrant/orders/views_services.py" in service_vpn > 538. service_order_item.save() > > File "/vagrant/orders/models.py" in save > 1150. super(ServiceOrder, self).save(*args, **kwargs) > > File "/usr/local/lib/python3.5/dist-packages/django/db/models/base.py" in > save > 806. force_update=force_update, > update_fields=update_fields) > > File "/usr/local/lib/python3.5/dist-packages/django/db/models/base.py" in > save_base > 836. updated = self._save_table(raw, cls, force_insert, > force_update, using, update_fields) > > File "/usr/local/lib/python3.5/dist-packages/django/db/models/base.py" in > _save_table > 900. for f in non_pks] > > File "/usr/local/lib/python3.5/dist-packages/django/db/models/base.py" in > <listcomp> > 900. for f in non_pks] > > File "/usr/local/lib/python3.5/dist- > packages/django/db/models/fields/files.py" in pre_save > 297. file.save(file.name, file.file, save=False) > > File "/usr/local/lib/python3.5/dist- > packages/django/db/models/fields/files.py" in save > 95. self.name = self.storage.save(name, content, > max_length=self.field.max_length) > > File "/usr/local/lib/python3.5/dist- > packages/django/core/files/storage.py" in save > 54. return self._save(name, content) > > File "/usr/local/lib/python3.5/dist- > packages/django/core/files/storage.py" in _save > 338. file_move_safe(content.temporary_file_path(), > full_path) > > File "/usr/local/lib/python3.5/dist-packages/django/core/files/move.py" > in file_move_safe > 70. copystat(old_file_name, new_file_name) > > File "/usr/lib/python3.5/shutil.py" in copystat > 195. follow_symlinks=follow) > > Exception Type: PermissionError at /orders/service/vpn/5/ > Exception Value: [Errno 1] Operation not permitted New description: I upgraded from DJango 1.10.6 to 1.11 and can no longer use FileField to upload files larger than 2.5 MB. When an attempt is made to upload a larger file I get the error below occurs. Please note if I downgrade to 1.10.6 again the upload feature works just fine. {{{ Django Version: 1.11 Exception Type: PermissionError Exception Value: [Errno 1] Operation not permitted Exception Location: /usr/lib/python3.5/shutil.py in copystat, line 195 Python Executable: /usr/bin/python3 Python Version: 3.5.2 Environment: Request Method: POST Request URL: http://localhost:8000/orders/service/vpn/5/ Django Version: 1.11 Python Version: 3.5.2 Installed Applications: ['django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'impersonate', 'stronghold', 'django.contrib.admin', 'django.contrib.admindocs', 'ajax_select', 'django_object_actions', 'ckeditor', 'mail_templated', 'administrative', 'changes', 'decommission', 'ecm', 'feedback', 'file_manager', 'gunicorn', 'orders', 'old_net_chg_req', 'server_request', 'security', 'shared', 'system', 'utilities', 'downtime', 'debug_toolbar'] Installed Middleware: ('django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'shared.middleware.CustomDowntimeMiddleware', 'stronghold.middleware.LoginRequiredMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'shared.middleware.GlobalRequestMiddleware', 'shared.middleware.UserTracebackMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'impersonate.middleware.ImpersonateMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'debug_toolbar.middleware.DebugToolbarMiddleware') Traceback: File "/usr/local/lib/python3.5/dist- packages/django/core/handlers/exception.py" in inner 41. response = get_response(request) File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _legacy_get_response 249. response = self._get_response(request) File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _get_response 187. response = self.process_exception_by_middleware(e, request) File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _get_response 185. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/vagrant/orders/views_services.py" in service_vpn 538. service_order_item.save() File "/vagrant/orders/models.py" in save 1150. super(ServiceOrder, self).save(*args, **kwargs) File "/usr/local/lib/python3.5/dist-packages/django/db/models/base.py" in save 806. force_update=force_update, update_fields=update_fields) File "/usr/local/lib/python3.5/dist-packages/django/db/models/base.py" in save_base 836. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) File "/usr/local/lib/python3.5/dist-packages/django/db/models/base.py" in _save_table 900. for f in non_pks] File "/usr/local/lib/python3.5/dist-packages/django/db/models/base.py" in <listcomp> 900. for f in non_pks] File "/usr/local/lib/python3.5/dist- packages/django/db/models/fields/files.py" in pre_save 297. file.save(file.name, file.file, save=False) File "/usr/local/lib/python3.5/dist- packages/django/db/models/fields/files.py" in save 95. self.name = self.storage.save(name, content, max_length=self.field.max_length) File "/usr/local/lib/python3.5/dist-packages/django/core/files/storage.py" in save 54. return self._save(name, content) File "/usr/local/lib/python3.5/dist-packages/django/core/files/storage.py" in _save 338. file_move_safe(content.temporary_file_path(), full_path) File "/usr/local/lib/python3.5/dist-packages/django/core/files/move.py" in file_move_safe 70. copystat(old_file_name, new_file_name) File "/usr/lib/python3.5/shutil.py" in copystat 195. follow_symlinks=follow) Exception Type: PermissionError at /orders/service/vpn/5/ Exception Value: [Errno 1] Operation not permitted }}} -- Comment: I'm not sure if there's much we can do with the report without a way to reproduce the problem. If you can [https://docs.djangoproject.com/en/dev/internals/contributing/triaging- tickets/#bisecting-a-regression bisect] to determine the commit where the behavior changed, that would be useful. -- Ticket URL: <https://code.djangoproject.com/ticket/28170#comment:1> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/070.623a96b3bc31168a6cf47b1b1e35bb16%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.