Angular 2 http.post FormData()向PHP上传文件
问题描述:
我有一个使用A2 CLI的项目,并且我尝试使用类型为“file”的输入标签上传文件。我的东西在整个工作流程中发挥作用,但是我无法从客户端到服务器获取文件数据。Angular 2 http.post FormData()向PHP上传文件
我有下面的代码在打字稿:
myFnc(event){
let fileList: FileList = event.target.files;
if(fileList.length > 0) {
let file: File = fileList[0];
console.log(file);
console.log(file.name);
let formData:FormData = new FormData();
formData.append('uploadFile', file, file.name);
let headers = new Headers();
/*
this was the culprit:
headers.append('Content-Type', 'multipart/form-data');
worked for me by changing it to:
*/
headers.append('enctype', 'multipart/form-data');
headers.append('Accept', 'application/json');
let options = new RequestOptions({ headers: headers });
console.log(formData);
console.log(options);
this.http.post('./assets/data/upload-persona-document.service.php', formData, options)
.map(res => res.json())
.catch(error => Observable.throw(error))
.subscribe(
data =>{
console.log(data);
},
error =>{
console.log(error);
}
)
}
}
我没有得到任何错误,让我检查在控制台的结果。 (我知道console.log(formData)实际上不会输出formData的内容,我试过.entries(),但是我已经读过FormData方法在TS中不被很好的支持)。
在upload-人物-document.service.php:
<?php
$target_dir = "../docs/Personas/";
$json = array();
$postData = file_get_contents("php://input");
$input = json_decode($postData);
$json['input'] = $input;
$json['post'] = ($_POST);
$json['files'] = $_FILES;
$target_file = $target_dir . basename($_FILES["uploadFile"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
echo json_encode($json);
// ...a bunch of code that will act on the data when I can finally get it correctly...
当我返回响应,我得到:
[Log] {input: null, post: [], files: []} (main.bundle.js, line 1117)
我在我缺少什么,我难住了。
答
所以更多的挖掘和实验后,事实证明,我不得不改变在Content-Type的headers.append()线ENCTYPE以上(更新该位。)
您可以发布您完全的.ts码。 –