问题背景
最近用uni-app
+ django-rest-framework
做毕设,前端有一个下载功能,需要请求后端static中的静态资源。但由于端口不同(8000和8080),一直报跨域的错误,如下图所示:
uni-app代码:
uni.downloadFile({
url: 'http://172.1xx.x.x:8000/static/imgs/logo.png',
success: (res) => {...}
})
网上搜索到的django解决跨域的方法大同小异,基本如下所示:
image.png
但是这种方法并不能解决直接请求static资源的问题,只对请求后端接口数据有效。
解决方法
方法一
cd static
http-server --cors
切入static目录,为static搭建一个node服务器,可以使用该服务器地址替换跨域的地址,进行资源请求。
(此方法并未真正解决问题,只是绕过了问题。)
方法二
在django的views.py
文件中编写接口,返回static资源的url(进行处理)
# views.py
def getFiles(request):
if request.method == "GET":
return HttpResponse(open('static/imgs/test.png', 'rb'), content_type='images/png')
# urls.py
...
re_path('getFiles', views.getFiles),
...
此时在uni-app
中即可成功下载文件:
// uni-app
uni.downloadFile({
url: "http://172.1xx.x.x:8000/IM/getFiles",
success: (res) => {...}
})
tips:
- 需要正确设置
content_type
-
images/png
是直接下载,image/png
是打开图片 -
content_type
设置参见:正确的设置输出文件的content-type
网友评论