我在客户端使用AngularJS将表单提交给服务器端的控制器。如何将包含文件的表单提交给FOSRestBundle控制器
由于我们正在将文件存储在应用程序中,并且用户提供了有关该文件的一些元数据,因此工作流无法拆分为较小的任务。
我已经使用Angular的$ http服务上的请求转换构建了提交数据。 Web服务客户端的当前状态:
function _save(dataModel, formfile)
{
$http({
url : basePath + (dataModel.id ? ("/" + dataModel.id) : ""),
method : "POST",
headers : {
'Content-Type' : undefined
},
transformRequest : function(data)
{
var formData = new FormData();
formData.append("dto", angular.toJson(data.model));
formData.append("file", data.file);
return formData;
},
data : {
model : dataModel,
file : formfile
}
}).then(function(response)
{
});
}
不幸的是,我得到这样的回应:
415不支持的媒体类型
我一直没能确定的哪些组件Symfony堆栈提供了该回复,也不提及multipart/form-data
或附加到该文件的Content-Type: application/octet-stream
规范。
有什么我可以做的调试和解决这个问题?我怀疑这是一个配置问题。以下是我已经添加到默认的Symfony配置config.yml的元素:
# Nelmio CORS Configuration
nelmio_cors:
defaults:
allow_credentials: false
allow_origin: ['*']
allow_headers: ['*']
allow_methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']
max_age: 3600
hosts: []
origin_regex: false
# FOSRest Configuration
fos_rest:
body_listener: true
body_converter:
enabled: true
validate: true
validation_errors_argument: validationErrors # This is the default value
format_listener:
rules:
- { path: '^/', priorities: ['json'], fallback_format: json, prefer_extension: false }
param_fetcher_listener: true
view:
view_response_listener: 'force'
formats:
json: true
html: false
#
# Needed for being able to use ParamConverter
sensio_framework_extra:
request: { converters: true }