【问题标题】:function getClientOriginalName() on null Laravel空 Laravel 上的函数 getClientOriginalName()
【发布时间】:2020-01-25 08:33:25
【问题描述】:

我试图在我的法语 laravel 应用程序中使用 Dropzone(最新版本)当我保存表单时出现错误

在 null 时调用成员函数 getClientOriginalName() 我尝试查看我的请求是否使用 dd() 发送了一些内容,但我得到了 null

这是我在控制器上的功能

public function enregistrer(Request  $request){
        $photo = $request->file('file');
        $imageName = $photo->getClientOriginalName();
        $image->move(public_path('images'),$imageName);

        $demande = new Demande();
        $demande->filename = $imageName;
        $demande->cin= $request('cin');
        $demande->apoge=$request('apoge');
        $demande->generatedCode= uniqid();
        $demande->save();

        return  redirect('/demande');

    }

这是我的观点

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <!-- All for dropzone -->
        <meta name="_token" content="{{csrf_token()}}" />
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.4.0/min/dropzone.min.css">

  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.4.0/dropzone.js"></script>

        <title>Submission E-Docs</title>

        <!-- Fonts -->
        <link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">

        <!-- Styles -->
        <style>
            html, body {
                background-color: #fff;
                color: #636b6f;
                font-family: 'Nunito', sans-serif;
                font-weight: 200;
                height: 100vh;
                margin: 0;
            }

            .full-height {
                height: 100vh;
            }

            .flex-center {
                align-items: center;
                display: flex;
                justify-content: center;
            }

            .position-ref {
                position: relative;
            }

            .top-right {
                position: absolute;
                right: 10px;
                top: 18px;
            }

            .content {
                text-align: center;
            }

            .title {
                font-size: 84px;
            }

            .links > a {
                color: #636b6f;
                padding: 0 25px;
                font-size: 13px;
                font-weight: 600;
                letter-spacing: .1rem;
                text-decoration: none;
                text-transform: uppercase;
            }

            .m-b-md {
                margin-bottom: 30px;
            }
        </style>
    </head>
    <body>
        <div class="flex-center position-ref full-height">
            @if (Route::has('login'))
                <div class="top-right links">
                    @auth
                        <a href="{{ url('/home') }}">Home</a>
                    @else
                        <a href="{{ route('login') }}">Login</a>

                        @if (Route::has('register'))
                            <a href="{{ route('register') }}">Register</a>
                        @endif
                    @endauth
                </div>
            @endif

            <div class="content">
                <form role="form" action="{{url('demande/store')}}" method="POST" enctype="multipart/form-data" class="dropzone" id="dropzone">
                @csrf
                <label> Votre CIN:</label>
                <input type="text" name="cin"/>
                <label> Votre Apogée:</label>
                <input type="text" name="apoge"/>

                <!-- <input name="file" type="file" multiple /> -->


                <br>
                <input type="submit" class="btn btn-outline-primary btn-lx"  style="font-family:'Quicksand', sans-serif; font-size:20px "value="Créer">

                </form>

            </div>
        </div>


        <script type="text/javascript">
            Dropzone.options.dropzone =
            {
                maxFilesize: 10,
                renameFile: function (file) {
                    var dt = new Date();
                    var time = dt.getTime();
                    return time + file.name;
                },
                acceptedFiles: ".jpeg,.jpg,.png,.gif",
                addRemoveLinks: true,
                timeout: 60000,
                success: function (file, response) {
                    console.log(response);
                },
                error: function (file, response) {
                    return false;
                }
            };
        </script>
    </body>
</html>

我认为这是由于

【问题讨论】:

  • 文件的输入框好像被注释掉了?这是故意的吗?
  • 是的,和它无关

标签: laravel dropzone


【解决方案1】:

您正在重命名用户选择的文件 dropboxJS,然后再将其发送到服务器

 renameFile: function (file) {
                var dt = new Date();
                var time = dt.getTime();
                return time + file.name; //<-- gets a unique name
            },

这个名字是动态的,在控制器上无法预测,但在你使用的控制器中

  $photo = $request->file('file');

显然这会失败,因为名称可以是任何基于发送时间的名称。所以第一个选择是删除renameFile,但如果这不可能,你需要一些方法来访问文件而不知道它上传的名称

试试这个

//$photo = $request->file('file');
$fileBag = $data->files; //Symfony\Component\HttpFoundation\FileBag
$collFile = $fileBag->all(); //an array of Symfony\Component\HttpFoundation\File\UploadedFile

if(count($collFile)){
    $photo = $collFile[0];
    //.. other code
}
else{
    echo 'No file was uploaded';
}

这基本上是尝试将FileBag 中的所有文件放入一个数组中,然后尝试从中选择第一个。

【讨论】:

    猜你喜欢
    • 2018-04-03
    • 2016-09-17
    • 2017-07-02
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多