[英]Angular JS file upload via php — Undefined index:
我正在嘗試使用Angular和PHP制作上傳方法。 那是我到目前為止所擁有的...
的HTML
<form class="well" enctype="multipart/form-data">
<div class="form-group">
<label for="file">Select a file to upload</label>
<input type="file" fileread="uploadme" >
<p class="help-block">Only jpg,jpeg,png and gif file with maximum size of 1 MB is allowed.</p>
</div>
<input type="button" ng-click="upoload()" class="btn btn-lg btn-primary" value="Upload">
</form>
JS
app.directive("fileread", [function () {
return {
scope: {
fileread: "="
},
link: function (scope, element, attributes) {
element.bind("change", function (changeEvent) {
scope.$apply(function () {
scope.fileread = changeEvent.target.files[0];
});
});
}
}
}]);
app.controller('upController',function($scope,$http){
$scope.upoload=function(){
$http.post('server/uploadFile.php',$scope.uploadme).
success(function(data, status) {
alert(status +" -- "+ data)
})
}})
的PHP
<?php
//turn on php error reporting
error_reporting(E_ALL);
ini_set('display_errors', 1);
//$data = json_decode( file_get_contents('php://input') );
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$name = $_FILES['uploadme']['name'];
$tmpName = $_FILES['uploadme']['tmp_name'];
$error = $_FILES['uploadme']['error'];
$size = $_FILES['uploadme']['size'];
$ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
switch ($error) {
case UPLOAD_ERR_OK:
$valid = true;
//validate file extensions
if ( !in_array($ext, array('jpg','jpeg','png','gif')) ) {
$valid = false;
$response = 'Invalid file extension.';
}
//validate file size
if ( $size/1024/1024 > 2 ) {
$valid = false;
$response = 'File size is exceeding maximum allowed size.';
}
//upload file
if ($valid) {
move_uploaded_file($tmpName,'../uploads/'.$name);
$response = 'OOOK!';
exit;
}
break;
case UPLOAD_ERR_INI_SIZE:
$response = 'The uploaded file exceeds the upload_max_filesize directive in php.ini.';
break;
case UPLOAD_ERR_FORM_SIZE:
$response = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.';
break;
case UPLOAD_ERR_PARTIAL:
$response = 'The uploaded file was only partially uploaded.';
break;
case UPLOAD_ERR_NO_FILE:
$response = 'No file was uploaded.';
break;
case UPLOAD_ERR_NO_TMP_DIR:
$response = 'Missing a temporary folder. Introduced in PHP 4.3.10 and PHP 5.0.3.';
break;
case UPLOAD_ERR_CANT_WRITE:
$response = 'Failed to write file to disk. Introduced in PHP 5.1.0.';
break;
case UPLOAD_ERR_EXTENSION:
$response = 'File upload stopped by extension. Introduced in PHP 5.2.0.';
break;
default:
$response = 'Unknown error';
break;
}
echo $response;
}
?>
問題是我找不到為索引變量賦索引的方法,我認為這就是我不斷收到“未定義索引”錯誤消息的原因。 有什么建議么?
感謝您的幫助。
有幾個原因導致您收到未定義的索引消息。
將您的表單代碼更改為:
<form class="well" enctype="multipart/form-data" method="post">
上傳文件時需要。
省略時,窗體默認為GET方法。
<input type="file" fileread="uploadme" >
它需要一個名稱屬性: name="uploadme"
將輸入更改為:
<input type="file" fileread="uploadme" name="uploadme">
另外,由於您正在使用以下條件語句:
if ($_SERVER['REQUEST_METHOD'] == 'POST')
它與POST方法結合使用,正如我所說的,您的表單中缺少該方法。
閱讀關於move_uploaded_file()
的文檔
從手冊中引用:
此功能檢查以確保filename所指定的文件是有效的上傳文件(意味着該文件是通過PHP的HTTP POST上傳機制上傳的)。 如果文件有效,則將其移動到destination所給定的文件名。
您應該使用另一個庫通過angular js上傳文件,在這里看看: https : //github.com/danialfarid/angular-file-upload
然后您將在js控制器中使用類似的代碼:
$scope.upload = $upload.upload({
url: 'your url', //upload.php script, node.js route, or servlet url
method: 'POST',
file: scope.fileread
}).progress(function (evt) {
//console.log('percent: ' + parseInt(100.0 * evt.loaded / evt.total));
}).success(function (data) {
// file is uploaded successfully
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.