我有一个场景,其中一个属性可以有多个图像,但该图像只能分配给一个属性(一对多,propertyId为FK)。
在html中我检索propertyId并使用uploadFile函数传递它
<div id="imageDiv" ng-controller="uploadImageCtrl">
<input type="button" class="btn btn-info" value="Upload Image" ng-click="uploadFile(pro.id)"/>
<input type="file" file-input="files"/>
</div>
这里我有我的app.js,我在那里检索图像,propertyId是Id。我试图传递id和form_data。
app.directive("fileInput", function($parse){
return{
link: function($scope, element, attrs){
element.on("change", function(event){
var files = event.target.files;
console.log(files[0].name);
$parse(attrs.fileInput).assign($scope, element[0].files);
$scope.$apply();
});
}
}
});
app.controller("uploadImageCtrl", function($scope, $http,$routeParams,$location){
$scope.uploadFile = function(id){
var form_data = new FormData();
angular.forEach($scope.files, function(file){
form_data.append('file', file);
});
$scope.id = id;
console.log(id);
$routeParams.id = id;
//$scope.activePath = null;
$scope.updateMessage="";
console.log(form_data);
$http.post('php/uploadImage.php/',{'id':id},form_data,
{
transformRequest: angular.identity,
headers: {'Content-Type': undefined,'Process-Data': false}
}).success(function(response){
alert(response);
});
}
});
然后在uploadImage.php中我将$ id分配给从app.j检索到的propertyId并将图像上传到该propertyId。
<?php
$data = json_decode(file_get_contents("php://input"));
$id=$data->id;
echo $id;
require_once("connection.php");
$conn = connectToDb();
if(!empty($_FILES))
{
$path = '../Images/' . $_FILES['file']['name'];
if(move_uploaded_file($_FILES['file']['tmp_name'], $path))
{
$insertQuery = "INSERT INTO tbl_images(imagePath , propertyId) VALUES ('".$_FILES['file']['name']."',$id)";
if(mysqli_query($conn, $insertQuery))
{
echo 'File Uploaded';
}
else
{
echo 'File Uploaded But not Saved';
}
}
}
else
{
echo mysqli_error($conn);
}
?>
问题是,它给我一个空白错误,数字8,不知道为什么不上传,8代表$ id(echo $ id)。所以propertyId是被成功检索并传入php。
错误可能是最后一个 ELSE 声明(echo mysqli_error($ conn))。
form_data是否未成功通过?
答案 0 :(得分:0)
我只需要使用表单数据附加 id ,然后使用正常的 POST 检索ID。
app.controller("uploadImageCtrl", function($scope, $http,$routeParams,$location){
$scope.uploadFile = function(id){
var form_data = new FormData();
angular.forEach($scope.files, function(file){
form_data.append('file', file);
});
form_data.append('elmID', id);
$http.post('php/uploadImage.php',form_data,
{
transformRequest: angular.identity,
headers: {
'Content-Type': undefined,
'Process-Data': false
}
}).success(function(response){
alert(response);
});
}
});