Django使用XHR下载媒体文件时出现CORS错误

Django使用XHR下载媒体文件时出现CORS错误,django,Django,我有个项目管理员上传FBX文件, 这些FBX文件通过XHR调用获取并加载到Threejs 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 网址 设置.py STATIC_ROOT = os.pa

我有个项目管理员上传FBX文件, 这些FBX文件通过XHR调用获取并加载到Threejs

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
网址

设置.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',
]
我没有上传问题,一切正常

我正在使用Threejs FBXloader下载FBX。这是一个XHR呼叫。 这个电话失败了。但如果我在浏览器上放置相同的链接,它就可以正常工作

对此文件的XHR调用失败。 但当你把它放在浏览器中时,它就工作了


这里可能有什么问题?

Django不通过中间件堆栈提供媒体文件,因此任何注入头的尝试都是毫无意义的。您需要在apache中启用CORS。 病毒宿主的这一变化为我做到了这一点

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中进行更改

如何失败?你有错误信息、回溯信息吗?你的视图是什么样子的?@TomCarrick我收到一个CORS错误,我只有静态文件的CORS错误。所有其他API的工作都会发布准确的错误消息。CORS策略已阻止从源站获取的访问:请求的资源上不存在“Access Control Allow origin”标头。如果不透明响应满足您的需要,请将请求的模式设置为“no cors”,以获取禁用cors的资源。var request=new request';fetchrequest.thenfunctione{console.loge/*句柄响应*/};
Alias /media/ /**<path to media>**/media/
<Directory /**<path to media>**/media>
    Header set Access-Control-Allow-Origin "*"
    Order allow,deny
    Allow from all
</Directory>