그래, 전체적으로및 CakePHP
양식을 사용하여 아약스를 통해 단일 파일을 업로드하려고합니다. 문제는 컨트롤러에서 $this->request->data
을 로깅하는 오류로 데이터를 잡으려고하면 빈 파일 배열을 반환한다는 것입니다.FormData, AJax 및 CakePHP를 사용하여 파일 업로드
그래서 CakePHP의 도우미를 사용하여 양식을 설정했습니다. 그러나 그 구조는 그다지 관련이 없습니다. 사용 된 자바 스크립트는 필요한 디버깅을 출력합니다.
여기는 설정입니다. RequestsController
라는 컨트롤러가 있고 내 뷰 이름/기능은 upload_files
입니다.
자바 스크립트 코드 조각은 다음과 같습니다. 주의 사항이이 파일 입력 요소 값이 변경 (그들은 업로드 할 파일을 즉를 선택한 후) 때 호출되는
plugin.fileUpload = function(el)
{
el = $(el);
form = el.closest('form');
var files = el.get(0).files;
console.log(files.length)
var formData = new FormData();
for (var i = 0; i < files.length; i++)
{
var file = files[i];
console.log(file);
formData.append('files[]', file, file.name);
}
formData.append("username", "[email protected]");
var xhr = new XMLHttpRequest();
xhr.open('POST', form.attr('action'), true);
xhr.onload = function() {
if (xhr.status === 200) {
toastr.success('Successfully loaded');
}
else
{
alert('An error occurred!');
}
};
xhr.send(formData);
console.log(files);
console.log(formData);
}
변명 모든 콘솔 로그. 그것은 출력과 디버깅을 보여주는 목적을위한 것입니다.
사용자 입력란을 추가하면 컨트롤러가 일부 데이터를 그대로두고 게시물을 만들고 있음을 테스트 할 수 있습니다. 그것은 정말로입니다. 당신이 볼 수 있듯이,
2014-06-18 17:51:41 Error: RequestsController::upload_files - Line 45
2014-06-18 17:51:41 Error: Array
(
[username] => [email protected]
)
사용자 이름 필드는 파일을 통해하지만 간다 : 여기에 $this->request->data
배열을 로그의 출력입니다.
JS 변수를 콘솔에 기록 했으므로 멋지게 보입니다. 방화범은 다음과 같습니다
FormData { append=append()}
한숨의 FormData 출력에 아무것도 파일이 FormData에 그것을 만드는 것을 제안하지 :
FileList { 0=File, length=1, item=item(), more...}
는 콘솔에 FormData 변수는 다음과 같이 보이는 로깅 목적.
어떤 아이디어 ??