gpt4 book ai didi

javascript - 如何使用 AngularJS 的 $http 将文件发送到 PHP 脚本

转载 作者:行者123 更新时间:2023-11-30 15:57:47 25 4
gpt4 key购买 nike

我认为我的问题很清楚,但这里有一些细节。我对 Angular 和 PHP 还很陌生,所以我可能犯了很多错误或遗漏了一些重要的东西:)。

我首先有一个包含文本和文件输入的表单。像这样:

<div><label for="textInput">Text input</label></div>
<div><input id="textInput" name="textInput" type="text" ng-model="form.textInput"></div><br/>
<div>Put some file please</div>
<div>
<input id="file1" type="file" name="file1" ng-model="form.file1"><br/>
<input id="file2" type="file" name="file2" ng-model="form.file2">
</div>

为了使用 ng-model 发布文件,我使用了这个指令:

(function () {
fileInput.$inject = [];
function fileInput() {
var fileTypeRegex = /^file$/i;
return {
restrict: 'E',
require: '?ngModel',
link: link
};
function link(scope, element, attrs, ngModel) {
if (ngModel && element[0].tagName === 'INPUT' && fileTypeRegex.test(attrs['type'])) {
element.on('change', function () {
var input = this;
if ('multiple' in attrs) {
var files = Array.prototype.map.call(input.files, function (file) { return file; });
ngModel.$setViewValue(files);
}
else {
ngModel.$setViewValue(input.files[0]);
}
});
}
}
}
angular.module('ng-file-input', []).directive('input', fileInput);
}());

最后,我用 $http 发送数据:

$http({
url: window.API_URL + 'postulate.php',
method:'POST',
data:$scope.form
}).then(function successCallback(response){
console.log(response.data);
console.log($scope.form);
});

在 PHP 文件中,我只获取 $_POST 数据并打印它:

$rest_json = file_get_contents("php://input");
$_POST = json_decode($rest_json, true);
echo json_encode($_POST);

这就是问题所在。我得到了 console.log() :

Object {textInput: "the content", file1: Array[0], file2: Array[0]}
Object {textInput: "the content", file1: File, file2: File}

做了很多谷歌和测试,但我无法让它工作。

问我是否需要更多详细信息。

最佳答案

要从 PHP 中通过 ajax 获取文件集,您需要使用 $_FILES php 全局变量,它实际上是一个数组,其中包含一些字段,例如 name类型tmp_name。因此,如果您发送多个文件,组合数组应如下所示:

 Array
(
[image] => Array
(
[name] => MyFile1.jpg (comes from the browser, so treat as tainted)
[type] => text/plain (not sure where it gets this from - assume the browser, so treat as tainted)
[tmp_name] => /tmp/php/php1h4j1o // this is were the temporally file is saved on the server
[error] => UPLOAD_ERR_OK (= 0)
[size] => 123 (the size in bytes)
)

[image] => Array
(
[name] => MyFile2.jpg
[type] => image/jpeg
[tmp_name] => /tmp/php/php6hst32
[error] => UPLOAD_ERR_OK
[size] => 98174
)
)

要获取 php 中的文件,您可以检查 $_FILES 是否已设置或不为空:

if (isset($_FILES['image']['name']) && (file_exists($_FILES['image']['tmp_name']))) {
// do the job here
}

image 字段的名称取决于您在 html 中定义表单的方式。例如,如果您有一个声明为的输入字段:

<input type="file" name="image" id="image">

那么这里的名称就是您识别$_FILES 第一个字段的方式。所以实际上你是根据数组键获取文件的。

希望这很清楚。

关于javascript - 如何使用 AngularJS 的 $http 将文件发送到 PHP 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38220146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com