2017-02-13 70 views
0

我沒有得到如何將文件格式的服務發送到laravel控制器並將其存儲在文件夾中。如何使用AngularJS服務和Laravel控制器保存文件夾中的文件

下面是視圖和控制器(Angularjs前端) 查看

<html> 

<head> 
    <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> 
</head> 

    <body ng-app = "myApp"> 

    <div ng-controller = "myCtrl"> 
    <form enctype="multipart/form-data"> 
    <input type = "file" file-model = "myFile"/> 
    <button ng-click = "uploadFile()">upload me</button> 
    </form> 
    </div> 

** controller** 
    <script> 
    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]); 
       }); 
       }); 
      } 
     }; 
    }]); 

    myApp.service('fileUpload', ['$http', function ($http) { 
     this.uploadFileToUrl = function(file, uploadUrl){ 
      var fd = {'file' : file} 
      var file = { 
      'file' : file 
      } 
      console.log(uploadUrl, fd) 
      $http.post("http://myipaddress/practice/upload/blog/public/index.php/uploadavtar",uploadUrl, fd) 
      .then(function(response) { 
      console.log(response.data) 
      }); 
     } 
    }]); 

    myApp.controller('myCtrl', ['$scope', 'fileUpload', function($scope, fileUpload){ 
     $scope.uploadFile = function(){ 
      var file = $scope.myFile; 

      console.log('file is '); 
      console.dir(file); 

      var uploadUrl = "/fileUpload"; 
      fileUpload.uploadFileToUrl(file, uploadUrl); 
     }; 
    }]); 

    </script> 

Laravel控制器

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

use App\Http\Requests; 
use Illuminate\Support\Facades\Input; 

class UsersController extends Controller 
{ 
public function uploadavtar(Request $request){ 


    $extension = Input::file('file')->getClientOriginalExtension(); 
    $filename = rand(11111111, 99999999). '.' . $extension; 
    Input::file('file')->move(
     '192.168.2.68/practice/upload/public/files/uploads/', $filename 
    ); 

     $fullPath = 'myipaddress/practice/upload' . $filename; 

    return $fullPath ; 

} 
} 

我checcked通過郵遞員上述larave控制器其工作正常唯一的問題是它沒有存儲文件。如果我從提交按鈕的同樣顯示錯誤

'Call to a member function getClientOriginalExtension() on a non-object 
' 

如何解決這兩個問題。 1.發送文件格式的服務到laravel控制器 2.將其存儲在定義的路徑中。

回答

1

我認爲錯誤說有在請求沒有文件(POST)

if($request->hasFile('file')) 
    { 
     $extension = Input::file('file')->getClientOriginalExtension(); 
     $filename = rand(11111111, 99999999). '.' . $extension; 
     Input::file('file')->move('192.168.2.68/practice/upload/public/files/uploads/', $filename); 
     $fullPath = 'myipaddress/practice/upload' . $filename; 

     return $fullPath ; 
    } 
    else 
    { 
     //file from post does not exist 
    } 

編輯

你得到了PARAMATERS錯在你的Ajax

myApp.service('fileUpload', ['$http', function ($http) { 
     this.uploadFileToUrl = function(file, uploadUrl){ 
      var fd = new FormData(); 
      fd.append('file', file); 

      $http.post("http://myipaddress/practice/upload/blog/public/index.php/uploadavtar", fd, { 
      transformRequest: angular.identity, 
      headers: {'Content-Type': undefined,'Process-Data': false} 
     }) 
     .success(function(response){ 
      console.log(response.data); 
     }) 
     .error(function(){ 
      console.log("error"); 
     }); 
     } 
    }]); 

第一paramater是爲鏈接,第二是形式數據,最後是設置

+0

但現在我沒有得到h我可以將文件從angularhs $ http請求發送到laravel控制器。控制器功能正常工作我通過postmant檢查。 @lukegkennjordan – Mohammed

+0

uploadurl有什麼用? @lukeglennjordan – Mohammed

相關問題