クライアント側で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
の指定を参照するのかを指定しません。
この問題をデバッグして修正する方法はありますか?私はこれが構成の問題だと思う。私はJavaScriptを使用してbase64文字列にファイルを変換し、テキスト文字列としてファイルを送信し、これを解決した
# 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 }