【问题标题】:The submitted data was not a file. Check the encoding type on the form提交的数据不是文件。检查表单上的编码类型
【发布时间】: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


【解决方案1】:

终于找到了解决办法。我需要使用

 data.append('file', ReactDOM.findDOMNode(this.refs.file).files[0]);

【讨论】:

    猜你喜欢
    • 2015-12-13
    • 2019-04-30
    • 1970-01-01
    • 2021-09-30
    • 2020-08-30
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多