免責事項:私はPHPについてほとんど知っています。私はちょうどそれで遊ぶようになったばかりです。バックエンドでサイレックス・ベースのPHPアプリでAJAX POSTリクエスト経由でファイルをアップロードし
背景:私はクライアント側でjavascript、バックエンドでPHPを使用してファイルをアップロードしたいと思います。バックエンドでは、私はSilex PHPのマイクロフレームワークを試しています。
クライアントコード:
HTML
<form id="fileform">
<input id="filefield" type="file" multiple="multiple" />
<input type="submit" />
</form>
ジャバスクリプト
var form = document.querySelector('#fileform');
var fileField = document.querySelector('#filefield');
form.addEventListener('submit', formSubmit, false);
function formSubmit(e) {
e.preventDefault();
let formData = new FormData();
let file = fileField.files[0];
formData.append('uploadedFile', file);
let config = {
method: 'POST',
mode: 'cors',
cache: 'default',
headers: {
'Content-Type': false
},
body: formData
};
fetch('http://localhost:8000/uploads/test', config).then((response) => {
console.log('submitted!');
});
}
バックエンドコード:
のphp(サイレックス・ベースのアプリケーションのコントローラ)
use Symfony\Component\HttpFoundation\Request;
$uploads->post('/test', function (Request $request) use ($app) {
$file = $request->files->get('uploadedFile');
if ($file == NULL) {
return 'null';
} else {
return 'not null';
}
});
問題:私は$request->files
オブジェクト内の名前「にUploadedFile」を持つファイルを持っていることを期待しますが、どちらかの何がそこに存在しないコントローラは$file == NULL
が真であると信じているので、または私は、アップロードされたファイルに到達する方法がわかりません。
健全性チェックとして、私は、コントローラから$request->getContent()
を戻し、ブラウザに結果を検査しました。
をバックエンドは名前'uploadedFile'
で、フォームの内容を取得しているようなので、それは思えるん:ここでは、バックエンドが取得しているものです。では、私はバックエンドで何が間違っているのですか?このアップロードされたファイルをSilexコントローラでどのように入手できますか?
それはすべてのようにひどく混乱します。助けてください!