Python Django Rest框架&x2B;Angular 2-上载多个文件
我使用Django Rest框架作为后端,Angular 2作为前端。我在Angular中创建了一个表单: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
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的答案,也没有收到任何其他想法,所以经过几个小时的重新拍摄,我发现我遗漏了两件事:
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);