【问题标题】:How to save file in folder using AngularJS service and Laravel Controller如何使用 AngularJS 服务和 Laravel 控制器将文件保存在文件夹中
【发布时间】:2017-07-01 06:46:13
【问题描述】:

我不知道如何将文件表单服务发送到 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 ;

}
 }

我通过邮递员检查了上面的 larave 控制器,它工作正常的唯一问题是它没有存储文件。如果我从提交按钮执行相同操作,则显示错误

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

如何解决这两个问题。 1.向laravel控制器发送文件表单服务 2. 将其存储在定义的路径中。

【问题讨论】:

    标签: php angularjs laravel file-upload save


    【解决方案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
        }
    

    编辑

    你的 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");
             });
            }
         }]);
    

    第一个参数是链接,第二个是表单数据,最后一个是设置

    【讨论】:

    • 但现在我不知道如何将文件从 angularhs $http 请求发送到 laravel 控制器。控制器功能工作正常我通过邮递员检查。 @lukegkennjordan
    • uploadurl 有什么用? @lukeglennjordan
    猜你喜欢
    • 1970-01-01
    • 2015-01-03
    • 2016-10-01
    • 1970-01-01
    • 2015-12-21
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    相关资源
    最近更新 更多