簡體   English   中英

通過php上傳Angular JS文件-未定義索引:

[英]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;
    }
    ?>

問題是我找不到為索引變量賦索引的方法,我認為這就是我不斷收到“未定義索引”錯誤消息的原因。 有什么建議么?

感謝您的幫助。

有幾個原因導致您收到未定義的索引消息。

  • 一種是該表單需要POST方法。

將您的表單代碼更改為:

<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM