Django Загрузка медиа-файла с использованием XHR дает ошибку CORS - PullRequest
0 голосов
/ 20 января 2020

У меня есть проект, в котором администратор загружает файлы FBX. Эти файлы FBX извлекаются через вызов XHR и загружаются в Three js.

Django Настройка.

Requirement.txt

asgiref==3.2.3
Django==3.0.2
django-cors-headers==3.2.1
django-filter==2.2.0
djangorestframework==3.11.0
Markdown==3.1.1
pytz==2019.3
sqlparse==0.3.0

URLS

urlpatterns = [
  path('admin/', admin.site.urls),
  path('fbx/', include('fbx.urls')),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Settings.py

STATIC_ROOT = os.path.join(BASE_DIR,'static')
STATIC_URL = '/static/'

MEDIA_ROOT = os.path.join(BASE_DIR,'media')
MEDIA_URL = '/media/'

Загрузить модель

from django.db import models

class Fbx(models.Model):
    name = models.CharField(max_length=200)
    fbx = models.FileField(max_length=200, blank=True)
    normals = models.FileField(max_length=200, blank=True)
    bump = models.FileField(max_length=200, blank=True)
    texture = models.FileField(max_length=200, blank=True)
    status = models.BooleanField(default=False)
    pub_date = models.DateTimeField(auto_now=True)

ИМПОРТ И СРЕДНИЕ ИЗДЕЛИЯ

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corsheaders',
    'rest_framework',
    'fbx.apps.FbxConfig'
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'corsheaders.middleware.CorsMiddleware',
]

У меня нет проблем с загрузкой, все отлично работает.

Я использую Three js FBXloader для загрузки FBX. Это вызов XHR. Этот звонок не удается. Но если я поставлю ту же ссылку в браузере, она будет работать нормально.

XHR-вызов этого файла http://XXXX/media/correction_1.fbx завершается неудачно. Но работает, когда вы кладете его в браузер.

В чем здесь проблема?

1 Ответ

1 голос
/ 21 января 2020

Django не передает медиафайлы через стек промежуточного программного обеспечения, поэтому любые попытки внедрить заголовки не имеют смысла. Вам необходимо включить CORS в apache. Это изменение в виртуальном хосте сделало это для меня.

Alias /media/ /**<path to media>**/media/
<Directory /**<path to media>**/media>
    Header set Access-Control-Allow-Origin "*"
    Order allow,deny
    Allow from all
</Directory>

Если вы не можете получить доступ к вирусному хосту, можно внести изменения в .htaccess https://enable-cors.org/server_apache.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...