【问题标题】:Issue with Laravel 4.2 Session::put methodLaravel 4.2 Session::put 方法的问题
【发布时间】:2017-02-15 16:51:46
【问题描述】:

我有一个方法用于在会话中存储文件并在目录中上传,然后从会话中获取数据并保存在数据库中。

我对这种方法有疑问。有时它可以正常工作,但在某些情况下并非所有项目都已保存在会话中。

我正在使用 Laravel Session::put() 方法将单独的项目保存到会话数组中。每次用户更改表单上的某些输入类型文件时,都会调用此方法。

例如,我有 3 个输入类型文件。有时当我尝试上传文件时,它会保存 ins ession 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>

【问题讨论】:

    标签: php laravel session


    【解决方案1】:

    laravel session 有一个生命周期,你可以从 app/session.php 配置它。但这不是这里的情况 - 如果目录中已经存在文件,则删除该文件时。 我认为您不需要会话来查找现有文件,只需使用 php file_exists 函数

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

    【讨论】:

      猜你喜欢
      • 2018-07-06
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 2016-09-20
      • 2016-01-14
      • 2015-11-08
      相关资源
      最近更新 更多