gpt4 book ai didi

javascript - 无法上传文件、php和angularjs

转载 作者:行者123 更新时间:2023-11-28 07:49:13 27 4
gpt4 key购买 nike

我正在尝试使用 angularJs 和 PHP 上传文件。

我正在使用 Angular 文件上传,https://github.com/danialfarid/angular-file-upload .

问题似乎出在我的 PHP 代码中,因为它要将文件移动到目标目录。

这是我的 Angular :

$scope.onFileSelect = 函数($files) { //Vi har valt en eller 跳蚤过滤器 //$files 是一个数组 innehållande de valda filerna att ladda upp. Dess namn,storlek ochty

for(var i = 0; i < $files.length; i++)
{
var file = $files[i];
$scope.upload = $upload.upload({
url: 'lib/actions.php',
data: {myObj: $scope.myModelObj},
file: file

}).progress(function(evt) {
console.log('percent: ' + parseInt(100.0 * evt.loaded / evt.total));
}).success(function(data, status, headers, config) {
console.log(data);
});
}

};

这很好用。对我的 PHP 文件进行了 POST:

if(isset($_FILES['file']))
{
$target_dir = "books/";
$target_file = $target_dir . basename($_FILES["file"]["name"]);

if(move_uploaded_file($_FILES['file']['tmp_name'], $target_file))
{
echo "YES";
}
else
{
echo "wrong";
}
}

这总是打印“错误”。我不明白为什么。谁能帮帮我?

最佳答案

尝试使用多部分 POST 类型而不是 $_FILES,这是一种发布文件的优雅方式:http://uncorkedstudios.com/blog/multipartformdata-file-upload-with-angularjs 。这对我有用。

编辑

如果链接的网站发生问题,我最好以优雅的方式在这里写下来。

您需要创建一个附加到 Controller 的指令,以便您可以处理当前范围,该指令可以如下所示:

.directive('fileModel', ['$parse', function ($parse) {
return {
restrict: 'A',
link: function(scope, element, attrs) {
var model = $parse(attrs.fileModel);
var modelSetter = model.assign;

element.bind('change', function(){
scope.$apply(function(){
modelSetter(scope, element[0].files[0]);
});
});
}
};

}]);

创建指令后,您可以在 html 部分中使用,如下所示:

<input type="file" file-model="myFile"/>

好吧,现在我们有了自己的指令可以处理您的文件,我们需要发送到服务器(在您的情况下为本地主机)。因此我们为此提供了一项服务:

.service('fileUpload', ['$http', function ($http) {
this.uploadFileToUrl = function(file, uploadUrl){
var fd = new FormData();
fd.append('file', file);
$http.post(uploadUrl, fd, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
})
.success(function(){
})
.error(function(){
});
}

}]);

就像这样,您可以为该服务提供任何 url,而不仅仅是您的本地主机,以及您要上传的文件。

但是我们如何做到这一点呢?只需将其复制到您的 Controller 即可:

var file = $scope.myFile;
var uploadUrl = 'http://www.example.com/images';
fileUpload.uploadFileToUrl(file, uploadUrl);

这应该有效。 :)

关于javascript - 无法上传文件、php和angularjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27062629/

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