File Upload Using AngularJS with php server script

前端 未结 1 651
孤街浪徒
孤街浪徒 2020-12-14 04:17

I have reviewed the questions and answers on this topic and I dont think they fully answer my issues which are:

  • the upload using the angular frontend (which

相关标签:
1条回答
  • 2020-12-14 04:46

    You can use FormData objects to send form data to your server.It will allow you to send both files and text data at the same time. You can find more information about it here.

    index.html

    <body ng-controller="myCtrl">
        <div class="file-upload">
            <input type="text" ng-model="name">
            <input type="file" file-model="myFile"/>
            <button ng-click="uploadFile()">upload me</button>
        </div>
    </body>
    


    In app.js, we create a custom directive fileModel, in which we listen for changes to the content of the input element and change the value of the variable in the scope accordingly. This is achieved using the $parse service to set the value in our scope.

    app.js

    var myApp = angular.module('myApp', []);
    
    myApp.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]);
                });
            });
        }
       };
    }]);
    
    // We can write our own fileUpload service to reuse it in the controller
    myApp.service('fileUpload', ['$http', function ($http) {
        this.uploadFileToUrl = function(file, uploadUrl, name){
             var fd = new FormData();
             fd.append('file', file);
             fd.append('name', name);
             $http.post(uploadUrl, fd, {
                 transformRequest: angular.identity,
                 headers: {'Content-Type': undefined,'Process-Data': false}
             })
             .success(function(){
                console.log("Success");
             })
             .error(function(){
                console.log("Success");
             });
         }
     }]);
    
     myApp.controller('myCtrl', ['$scope', 'fileUpload', function($scope, fileUpload){
    
       $scope.uploadFile = function(){
            var file = $scope.myFile;
            console.log('file is ' );
            console.dir(file);
    
            var uploadUrl = "save_form.php";
            var text = $scope.name;
            fileUpload.uploadFileToUrl(file, uploadUrl, text);
       };
    
    }]);
    

    save_form.php

     <?php
    
         $target_dir = "./upload/";
         $name = $_POST['name'];
         print_r($_FILES);
         $target_file = $target_dir . basename($_FILES["file"]["name"]);
    
         move_uploaded_file($_FILES["file"]["tmp_name"], $target_file);
    
         //write code for saving to database 
         include_once "config.php";
    
         // Create connection
         $conn = new mysqli($servername, $username, $password, $dbname);
         // Check connection
         if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
         }
    
         $sql = "INSERT INTO MyData (name,filename) VALUES ('".$name."','".basename($_FILES["file"]["name"])."')";
    
         if ($conn->query($sql) === TRUE) {
             echo json_encode($_FILES["file"]); // new file uploaded
         } else {
            echo "Error: " . $sql . "<br>" . $conn->error;
         }
    
         $conn->close();
    
    ?>
    


    0 讨论(0)
提交回复
热议问题