2016-10-06 3 views
0

세션에서 파일을 저장하고 디렉토리에 업로드 한 다음 세션에서 데이터를 가져 와서 데이터베이스에 저장하는 데 사용하는 방법이 있습니다.Laravel 관련 문제 4.2 Session :: put 메서드

이 방법으로 문제가 있습니다. 때로는 제대로 작동하지만 모든 항목이 세션에 저장되지 않은 경우가 있습니다.

세션 배열에 별도의 항목을 저장하려면 Laravel Session::put() 메서드를 사용하고 있습니다. 사용자가 양식에서 일부 입력 유형 파일을 변경할 때마다이 메소드가 호출됩니다.

예를 들어 3 개의 입력 파일이 있습니다. 때로는 파일을 업로드하려고 할 때 front_passport 필드와 address_document 필드를 저장하지만 back_passport 필드는 저장하지 않습니다.

Laravel 세션에서 어떤 경우에 사용하고 있습니까?

$(".app-file").on('change', function(){ 
 
     var formData = new FormData(); 
 
     formData.append($(this).attr('name'), this.files[0]); 
 
     formData.append('name', $(this).attr('name')); 
 
     $.ajax({ 
 
      url: store_files, 
 
      type: "POST", 
 
      data: formData, 
 
      contentType: false, 
 
      processData: false, 
 
      success: function(response) { 
 
       if(response.errors) { 
 
        $.each(response.errors, function (k, v) { 
 
         $('[name=' + k + ']').parent().find('.file-name').html(''); 
 
         $('<label class="error file_error">' + v + '</label>').insertAfter($('[name=' + k + ']').next().next()); 
 
        }); 
 
       } 
 
      }, 
 
      error: function() { 
 
       $('.ajax-error').remove(); 
 
       $('<span class="error col-md-6 ajax-error">There is some error! Please try again later!</span>').insertAfter($('.upload-section h3')); 
 
      } 
 
     }); 
 

 
    });
public function storeFiles() { 
 
     $name = Input::get('name'); //input name 
 
     $input = Input::all(); 
 
     $input_file = Input::file($name); 
 
     $current_time = time(); 
 
     $allowed = array('jpeg','jpg','gif','png','pdf'); 
 
     
 
     $file_name = $current_time . '_' . $input_file->getClientOriginalName(); 
 
      $extension = File::extension($file_name); 
 

 
      if (!in_array($extension, $allowed)) { 
 
       return Response::json(array(
 
        'success' => false, 
 
        'errors' => [$name => 'Please provide an image with one of the following extensions : jpg, gif, png or pdf'] 
 
       )); 
 
      } 
 

 
      $current_session = Session::get($name); //delete existing image from directory 
 
      $item_path = APPLICATIONS_DIR.'/'.$current_session; 
 
      if (file_exists($item_path) && !empty($current_session)) { 
 
       $removed_file = unlink($item_path); 
 
      } 
 

 
      if ($input_file) { 
 
       $input_file->move(APPLICATIONS_DIR, $file_name); 
 
      } 
 
      Session::put($name, $file_name); 
 

 

 
     return Response::json(array(
 
      'files' => ['name' => $name,'session' => Session::all()] 
 
     )); 
 
     
 

 
}

내 HTML은 다음과 같습니다 :

내 코드는 다음과

<div class="form-group"> 
 
          <label for="front_passport" class="col-md-2 label-file">{{translate("Front ID/Passport")}}<span class="required-label">*</span></label> 
 
          <div class="col-md-8 file-wrapper"> 
 
           {{ Form::file('front_passport', ["class"=>"app-file"]) }} 
 
           <label for="front_passport" class="file-upload"><span>{{translate("Upload a File")}}</span></label> 
 
           <div class="file-name" data-input="front_passport"></div> 
 
           <label for="front_passport" generated="true" class="<?php echo $errors->has('front_passport') ? 'error' : '';?>">{{ $errors->first('front_passport') }}</label> 
 
          </div> 
 
         </div> 
 
         <div class="form-group"> 
 
          <label for="back_passport" class="col-md-2 label-file">{{translate("Back ID/Passport")}}<span class="required-label">*</span></label> 
 
          <div class="col-md-8 file-wrapper"> 
 
           {{ Form::file('back_passport', ["class"=>"app-file"]) }} 
 
           <label for="back_passport" class="file-upload"><span>{{translate("Upload a File")}}</span></label> 
 
           <div class="file-name" data-input="back_passport"></div> 
 
           <label for="back_passport" generated="true" class="<?php echo $errors->has('back_passport') ? 'error' : '';?>">{{ $errors->first('back_passport') }}</label> 
 
          </div> 
 
         </div> 
 
         <div class="form-group"> 
 
          <label for="address_document" class="col-md-2 label-file">{{translate("Proof of Address")}}<span class="required-label">*</span></label> 
 
          <div class="col-md-8 file-wrapper"> 
 
           {{ Form::file('address_document', ["class"=>"app-file"]) }} 
 
           <label for="address_document" class="file-upload"><span>{{translate("Upload a File")}}</span></label> 
 
           <div class="file-name" data-input="address_document"></div> 
 
           <label for="address_document" generated="true" class="<?php echo $errors->has('address_document') ? 'error' : '';?>">{{ $errors->first('address_document') }}</label> 
 
          </div> 
 
         </div>

답변

0

laravel 세션 수명이있다, 당신은 캘리포니아 n app/session.php에서 설정합니다. 그러나 파일이 디렉토리에 이미있는 경우 파일을 삭제할 때 여기에는 해당되지 않습니다. 기존 파일을 찾으려면 inorder 세션이 필요하지 않다고 생각하면 단순히 PHP를 사용하십시오. file_exists function

public function storeFiles() { 
    $name = Input::get('name'); //input name 
    $input = Input::all(); 
    $input_file = Input::file($name); 
    $current_time = time(); 
    $allowed = array('jpeg', 'jpg', 'gif', 'png', 'pdf'); 

    $file_name = $current_time . '_' . $input_file->getClientOriginalName(); 
    $extension = File::extension($file_name); 

    if (!in_array($extension, $allowed)) { 
     return Response::json(array(
        'success' => false, 
        'errors' => [$name => 'Please provide an image with one of the following extensions : jpg, gif, png or pdf'] 
     )); 
    } 


    //delete existing image from directory 
    $item_path = APPLICATIONS_DIR . '/' . $file_name; 
    if (file_exists($item_path)) { 
     $removed_file = unlink($item_path); 
    } 

    if ($input_file) { 
     $input_file->move(APPLICATIONS_DIR, $file_name); 
    } 

    return Response::json(array(
       'files' => ['name' => $name, 'session' => [$name => $file_name]] 
    )); 
}