2016-03-15 17 views
8

Vì vậy, tôi đã có một số mã hoạt động, nhưng tôi cần phải thêm nhiều hình ảnh tải lên nó. Tôi đã sử dụng this plugin. Bây giờ HTML của tôi trông như thế này:Yêu cầu có nhiều hình ảnh laravel ajax nhiều hình ảnh

<form class="form-horizontal full-width pull-left m-t-20" name="myForm" ng-if="showForm"> 
    <div class="form-group"> 
     <label for="Naam" class="col-sm-3 control-label">Naam</label> 
     <div class="col-sm-9"> 
     <input type="text" class="form-control" id="Naam" ng-model="addForm.name" placeholder="Naam"> 
     </div> 
    </div> 
    <div class="form-group"> 
     <div class="imageselect col-sm-3"> 
     Afbeeldingen 
     <input type="file" ngf-select ng-model="files" ngf-multiple="true" accept="image/*" /> 
     Drop afbeeldingen: <div ngf-drop ng-model="files" class="drop-box">Drop</div> 
     </div> 
     <div class="col-sm-9"> 
     <div ng-repeat="file in files" class="imagepreview"> 
      <img ng-show="myForm.file.$valid" ngf-thumbnail="file" class="thumb"><br /> <button ng-click="file = null" class="thumbremove" ng-show="file">Verwijder</button> 
     </div> 
     </div> 
    </div> 
    <div class="form-group"> 
     <span class="progress" ng-show="files.progress >= 0"> 
     <div style="width:<<files.progress>>%" ng-bind="files.progress + '%'"></div> 
     </span> 
     <div class="col-sm-10"> 
     <button type="submit" ng-click="addStore(files)" class="btn btn-default">Opslaan</button> 
     </div> 
    </div> 
</form> 

và đây là mã của tôi javascript:

.controller('StoresController', ['$scope', '$http', 'handlerService', 'Upload', '$timeout', function($scope, $http, handlerService, Upload, $timeout) { 
    $scope.model = {}; 
    $scope.model.stores = stores; 
    $scope.showForm = true; 
    $scope.addForm = {}; 
    $scope.addForm.name = ''; 

    $scope.addStore = function(files) { 
    $scope.showForm = true; 
    files.upload = Upload.upload({ 
    method: 'POST', 
    url: 'http://localhost:8000/stores/add/', 
    data: {store : $scope.addForm, files: files}, 
    }); 

    files.upload.then(function (res) { 
     $timeout(function() { 
     handlerService.isValid(res.data); 
     if(res.data.isValid == true) { 
      $scope.showForm = false; 
      $scope.addForm = {}; 
     } 
     }); 
    }, function (response) { 
     if (response.status > 0) 
     $scope.errorMsg = response.status + ': ' + response.data; 
     }, function (evt) { 
     // Math.min is to fix IE which reports 200% sometimes 
     files.progress = Math.min(100, parseInt(100.0 * evt.loaded/evt.total)); 
    }); 
    } 

}]) 

Và phần back-end:

namespace App\Http\Controllers; 
use Illuminate\Http\Request; 
use App\Http\Requests; 
use DB; 

class StoresController extends Controller 
{ 
    public function add(Request $request) { 
     $files = array(); 
     foreach($_FILES as $file) { 
     $filename = $file['name']; 
     $files[] = $file['name']; 
     $destination = '../public/assets/img/stores/' . $filename; 
     move_uploaded_file($file['tmp_name'] , $destination); 
     } 
     $store = $request->store; 
     $store['images'] = json_encode($files); 
     $isValid = false; 
     if(isset($store['name']) && $store['name'] != '') { 
     DB::table('stores')->insert(
      $store 
     ); 
     $isValid = true; 
     $message = 'store is added.'; 
     } else { 
     $message = json_encode($request->all()); 
     $isValid = false; 
     } 

     $result = [ 
     'isValid' => $isValid, 
     'message' => $message 
     ]; 
     return json_encode($result); 
    } 
} 

Nhưng toàn bộ yêu cầu rỗng. Nếu không có phần tải lên tệp, tôi có thể thêm cửa hàng mà không gặp sự cố. Tôi cũng có thể thấy trọng tải được gửi cùng với cửa hàng và hình ảnh khi tôi kiểm tra yêu cầu AJAX của mình. Tôi đang làm gì sai?

+0

Bạn nhận được bất kỳ lỗi nào như lỗi nội bộ 500 trong bảng điều khiển trình duyệt không? –

+0

Không có lỗi nào cho thông báo tôi trả về được điền vào một mảng trống: "[]" –

+0

thử 'if (Yêu cầu :: ajax())' trong phần phụ trợ của bạn để xem có yêu cầu nào không bộ điều khiển. –

Trả lời

4

Tôi cần cung cấp resumeSizeUrl hoặc resumeSize để kiểm tra tiến độ của tệp. Sau khi tôi đã làm điều đó các tập tin của tôi gửi mà không có một vấn đề.

Phần phụ trợ không đúng. Để tải lên các tập tin tôi đã sử dụng lớp Request của laravel. Đây là mã phụ trợ hiện tại:

public function add(Request $request) { 
    $isValid = true; 

    DB::beginTransaction(); 
    $store = $request->store; 
    if(isset($store['name']) && $store['name'] != '') { 
    $id = DB::table('stores')->insertGetId(
     $store 
    ); 
    } else { 
    $message = 'Naam mag niet leeg zijn'; 
    $isValid = false; 
    } 

    if($isValid === true) { 
    // getting all of the post data 
    $files = $request->file('files'); 
    // Making counting of uploaded images 
    $path = 'stores'.'/'.$id; 
     $file_count = count($files); 
     // start count how many uploaded 
     $uploadcount = 0; 
     foreach($files as $file) { 
     $rules = array('file' => 'mimes:png,gif,jpeg'); //'required|txt,pdf,doc' 
     $validator = Validator::make(array('file'=> $file), $rules); 
     if($validator->passes()) { 
      $destinationPath = 'img/'.$path.'/'; 
      $filename = $file->getClientOriginalName(); 
      $upload_success = $file->move($destinationPath, $filename); 
      $uploadcount ++; 
     } else { 
      $message = 'Alleen afbeeldingen zijn toegestaan'; 
      $isValid = false; 
     } 
     } 
     if($isValid == true) { 
     if($uploadcount != $file_count) { 
      $message = 'Niet alle bestanden zijn geupload'; 
      $isValid = false; 
     } 
     } 
    } 

    if($isValid == true) { 
    DB::commit(); 
    $message = 'Store Toegevoegd!'; 
    } 
    if($isValid == false) { 
    DB::rollBack(); 
    } 

    $result = [ 
    'isValid' => $isValid, 
    'message' => $message 
    ]; 

    return json_encode($result); 
} 
Các vấn đề liên quan