2014-11-21 125 views
1

我試圖用angularJs和PHP上傳文件。無法上傳文件,php和angularjs

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

這個問題似乎在我的PHP代碼中,因爲它需要將文件移動到目標目錄。

這是我的角度:

$ scope.onFileSelect =函數($文件){// HAR六烯VALT跳蚤埃勒濾波器 // $文件AR烯陣列innehållande德valda filerna ATT ladda UPP。 Dess namn,storlek och typ

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); 
    }); 
} 

};

This works great。一個POST是對我的PHP文件:

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"; 
    } 
} 

這總是打印「錯誤」。我不明白爲什麼。任何人都可以幫助我?

+0

我認爲,這是一個關於路徑的問題。讓我們用'var_dump(getcwd())'看看你當前的目錄是什麼,它有一個'books'子目錄 – vaso123 2014-11-21 13:36:06

+0

@lolka_bolka輸出結果是:string(21)「/ var/www/cryptlib/lib」 – user500468 2014-11-21 13:37:42

+0

書籍目錄在哪裏? '/ var/www/cryptlib/lib/books'或'/ var/www/cryptlib/books'? – vaso123 2014-11-21 13:38:52

回答

0

嘗試使用多部分POST類型而不是$ _FILES,這裏是發佈文件的優雅方式:http://uncorkedstudios.com/blog/multipartformdata-file-upload-with-angularjs。這對我有效。

編輯

更好,我寫下了這裏的優雅的方式,如果有事情和鏈接的網站,會出現。

你需要創造什麼連接到您的控制器指令,這樣你就可以處理當前的範圍,可以將指令如下:

.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(){ 
    }); 
} 

}]);

就是這樣,你可以給這個服務的任何網址,不只是你的本地主機,和文件,你想要上傳。

但我們該怎麼做?只需將其複製到您的控制器:

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

這應該有效。 :)

+0

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – 2014-11-27 09:32:02