Laravel使用AngularJS仅存储来自多个文件上载文件的一个文件

前端之家收集整理的这篇文章主要介绍了Laravel使用AngularJS仅存储来自多个文件上载文件的一个文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
早上好或晚上好(这取决于你读这个主题).

我用angular和laravel编写了这段代码上传多个文件,
但我从请求中获得的只是一个文件对象,而其他所有文件对象都被释放,因此在laravel控制器中不会循环使用foreach并返回undefined.

请给我一个反馈

HTML

<input ng-file-model = "files" value="Seleziona file" type="file"
       name = "file[]" class="btn btn-info btn-s" multiple />

控制器(AngularJS)

$scope.upload = function(){
    var obj = {};
    obj.pratica = $scope.pra.id;
    obj.cliente = $scope.cliente.id;
    obj.tipoDoc = $scope.getTipoDoc;
    obj.file = $scope.files;
    dati.uploadFile(obj)
        .success(function(result){
            $rootScope.stampaGritter(result.message,"success");
        })
        .error(function(result){
            $rootScope.stampaGritter(result.message,"error");
        });
};
app.directive('ngFileModel',['$parse',function ($parse) {
    return {
        restrict: 'A',link: function (scope,element,attrs) {
            var model = $parse(attrs.ngFileModel);
            var isMultiple = attrs.multiple;
            var modelSetter = model.assign;
            element.bind('change',function () {
                angular.forEach(element[0].files,function (item) {
                    scope.files.push(item);
                });
                scope.$apply(function () {
                    if (isMultiple) {
                        modelSetter(scope,scope.files);
                    } else {
                        modelSetter(scope,scope.files[0]);
                    }
                });
            });
        }
    };
}]);
uploadFile: function(obj) {
    var fd = new FormData();
    angular.forEach(obj.file,function(item) {
        fd.append('file',item);
    });
    fd.append('tipo_doc',obj.tipoDoc);
    fd.append('cliente',obj.cliente);
    fd.append('pratica',obj.pratica);
    $http.post(
        "api/storeFile",fd,{
            transformRequest: angular.identity,headers: {'Content-Type': undefined
        }
    })
},

控制器(Laravel)

public function storeFile(Request $request) {
    /*$file = $request->file('file');
    $filename = $file->getClientOriginalName();
    $guid = $this->getGUID();
    $file->move(storage_path()."\\app\\file",$guid);
    $response = [
        "file" => $filename,"GUID" => $guid
    ];
    $file = new Documenti($response);
    $file->save();*/
    $cli = $request->input('cliente');
    $pra = $request->input('pratica');
    $tipoDoc = $request->input('tipo_doc');
    $files = $request->file('file');
    dd($files);
    foreach($files as $file) {
        $guid = $this->getGUID();
        $file->move(storage_path()."\\app\\file",$guid);
        $response = [
            'cliente_id' => $cli,'pratica_id' => $pra,'tipo_id' => $tipoDoc,'file' => $file->getClientOriginalName(),'GUID' => $guid
        ];
        $file = new Documenti($response);
        $file->save();
    }
    return response()->json($response);
}

当打印dd($files)时

请求有效负载

------WebKitFormBoundary1yzFmBAy2rTa73eV
Content-Disposition: form-data; name="file"; filename="autorizzazioni2.CSV"
Content-Type: application/octet-stream


------WebKitFormBoundary1yzFmBAy2rTa73eV
Content-Disposition: form-data; name="file"; filename="bustapaga.pdf"
Content-Type: application/pdf


------WebKitFormBoundary1yzFmBAy2rTa73eV
Content-Disposition: form-data; name="tipo_doc"

7
------WebKitFormBoundary1yzFmBAy2rTa73eV
Content-Disposition: form-data; name="cliente"

2
------WebKitFormBoundary1yzFmBAy2rTa73eV
Content-Disposition: form-data; name="pratica"

2
------WebKitFormBoundary1yzFmBAy2rTa73eV--
Laravel有商店功能使用这个
foreach ($request->file as $file) {
  $filename = $file->store('folder');
}

这里的文件夹是storage / app / folder

你需要像这样更改FormData,你必须在FormData中添加file []数组

for (let i = 0; i < obj.file.length; i++) {
     let f = obj.file[i];
     fd.append('file[]',f);
 }

猜你在找的Angularjs相关文章