Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django Rest框架&x2B;Angular 2-上载多个文件_Python_Django_Angular_File Upload_Django Rest Framework - Fatal编程技术网

Python Django Rest框架&x2B;Angular 2-上载多个文件

Python Django Rest框架&x2B;Angular 2-上载多个文件,python,django,angular,file-upload,django-rest-framework,Python,Django,Angular,File Upload,Django Rest Framework,我使用Django Rest框架作为后端,Angular 2作为前端。我在Angular中创建了一个表单: createResourcesForm() { this.resourcesForm = this.formBuilder.group({ resources: this.formBuilder.array([ this.formBuilder.group({ title: ['', Validators.compose([Validators.re

我使用Django Rest框架作为后端,Angular 2作为前端。我在Angular中创建了一个表单:

createResourcesForm() {
  this.resourcesForm = this.formBuilder.group({
    resources: this.formBuilder.array([
      this.formBuilder.group({
        title: ['', Validators.compose([Validators.required])],
        file: ['', Validators.compose([])],
      })
    ])
  })
}
如您所见,表单由
FormArray
组成,其中每个元素都有两个输入:标题和文件-分别是文本输入和文件输入。在提交表单时,我试图将数据发送到Django,但我得到一个错误
缺少文件名。请求应包括带有文件名参数的内容处置标头。
。我可以很容易地设置它,但我希望收到一个{title,file}列表,那么如何设置多个文件名呢?还有其他办法吗

Django Rest框架中的错误来自
FileUploadParser
中的
parse
方法

我没有在这里粘贴任何Python代码,因为它是标准的
ListCreateAPIView
,没有什么特别之处。这是我的序列化程序:

class ResourceCreateSerializer2(serializers.Serializer):
    author_pk = serializers.IntegerField(required=False)
    author_first_name = serializers.CharField(max_length=50, required=False)
    author_last_name = serializers.CharField(max_length=50, required=False)
    resources = ResourceWithoutAuthorSerializer(many=True)

class ResourceWithoutAuthorSerializer(serializers.ModelSerializer):
    instruments = InstrumentSerializer(many=True)

    class Meta:
        model = MusicResource
        fields = ['title', 'file', 'instruments']
不要介意其他字段,它们发送得很好(与文件一样)。还有一件事要说——在发送数据之前,我正在Angular中添加一个
内容类型
标题

更新1 以下是我上传文件的方法(Angular 2):

get value(){
设formData=new formData();
for(设i=0;i
然后

this.musicsourceservice.addmusicsource(toSend.subscribe)(
data=>console.log('successfully added resources'),
err=>console.log('MusicResourcesAddComponent','onMusicResourceFormSubmit',err)
);
addMusicResource(数据){
let headers=新的头({});
headers.append('Content-Type','multipart/formdata');
headers.append('Accept','application/json');
let options=newrequestoptions({headers});
返回this.api.post('resources/resources/list_create/',data,true,options);
}
公共帖子(url:any、有效负载:any、noToken?、选项?:any):可观察{
const provider=noToken?this.http:this.authHttp;
const fulLUrl=this.conf.getAPIUrl()+url;
返回provider.post(完整URL、有效负载、选项)
.延迟(100)
.map(此.extractData)
.catch(this.handleError.share();
}

我不喜欢@Robert的答案,也没有收到任何其他想法,所以经过几个小时的重新拍摄,我发现我遗漏了两件事:

  • 解析器应该设置为MultiPartParser,而不是FileUploadParser
  • 不需要手动设置内容类型标题,它将随着我丢失的边界自动填充
  • 此外,为了确保Django接收到所有数据并理解它们,我必须进行更改

    formData.append('resources-' + i + '-title', resource.title);
    
    和类似的线路

    formData.append('resources[' + i + ']title', resource.title);
    

    你能用angular2done上传文件吗!有很多代码,函数正在调用中,但我在浏览器中检查了发送到服务器的数据,看起来还可以。
    formData.append('resources-' + i + '-title', resource.title);
    
    formData.append('resources[' + i + ']title', resource.title);