【发布时间】:2016-10-31 20:28:51
【问题描述】:
当我尝试将 FormData 提交到 DRF 时,我收到了此错误 The submitted data was not a file. Check the encoding type on the form。这是我的代码:
jquery:
upload(e) {
e.preventDefault();
let data = new FormData();
data.append('name', ReactDOM.findDOMNode(this.refs.name).value);
data.append('album', ReactDOM.findDOMNode(this.refs.album).value);
data.append('playlist', 1);
data.append('file', ReactDOM.findDOMNode(this.refs.file).value);
$.ajax({
url: '/api/music/',
method: 'post',
headers: {
'Authorization': 'JWT ' + sessionStorage.getItem('token')
},
contentType: false,
data: data,
processData: false
}).done(function (res) {
console.log(res.responseText);
}).fail(function (error) {
console.error(error.responseText);
});
序列化器:
class MusicSerializer(serializers.ModelSerializer):
file = serializers.FileField()
class Meta:
model = Music
fields = ('id', 'favorite', 'created_at', 'file', 'counter', 'name', 'album', 'playlist')
并查看:
class MusicViewSet(viewsets.ModelViewSet):
authentication_classes = (CsrfExemptSessionAuthentication, JSONWebTokenAuthentication)
queryset = Music.objects.all()
serializer_class = MusicSerializer
parser_classes = (FormParser, MultiPartParser)
def perform_create(self, serializer):
file_obj = self.request.FILES['file']
#dbx = dropbox.Dropbox(JSON_DATA['dropbox_access_token'])
#res = dbx.files_upload(file_obj, '/', autorename=True, mute=True)
print(file_obj)
#serializer.save(dropbox_id='x')
【问题讨论】:
-
不确定,但相信这将是服务器正确响应客户端问题,请求没有按照您的预期形成。我建议在浏览器开发人员工具面板中检查发出的请求,看看它是否符合您的预期。
标签: jquery django django-rest-framework