【问题标题】:Laravel backend not saving to databaseLaravel 后端不保存到数据库
【发布时间】:2018-01-08 23:31:38
【问题描述】:

我正在使用 laravel 作为后端 API REST 上传文件。当我在前端上传文件时,它会在响应中发送 200 OK 状态码,但不会将其保存到数据库中。我看到的奇怪之处在于,响应中的数据为空,而文件数组位于响应的配置部分。

这是处理这种情况的控制器

 public function makeFile(Request $request)
    {
        $fileArray = [];
    if (isset($request->files) && is_array($request->files)) {
        foreach ($request->files as $key => $fileEntity) {
            $file= new File();
            $file->file=$fileEntity['file'];
            $file->shipment_id=$fileEntity['shipment_id'];
            $file->user_id=$fileEntity['user_id'];
            $file->date=date('Y,m,d,G,i,s');
            $file->fileName=$fileEntity['fileName'];
            $file->fileType=$fileEntity['fileType'];
            $file->status=$fileEntity['status'];
            $file->save();

            $fileArray[] = $file;
        }
    }
    return response()->json($fileArray);
    }

这是我的表格

<uib-tab index="1" heading="Files">
                        <div class="row">
                        <label>Add File</label>
                            <ul class="shipment__files">
                                <li class="col-xs-12 col-md-6" ng-repeat="file in shipment.shipmentObject.files">
                                    <a href="#"><img ng-src="{{ file.iconURL }}" width="60"></a>
                                    <div class="filename"><a href="#">{{ file.fileName }}</a></div>
                                    <div class="date">{{ file.date }}</div>
                                    <div class="uploader">{{ file.user_id }}</div>
                                </li>
                            </ul>
                        </div>
                        <!-- <form>
                        <input type="file" name="" ng-model="shipment.shipmentObject.file">
                        <button class="btn btn-primary" ng-click="shipment.makeFile(shipmentObject.file)" >Upload File</button>

                        <div>aa {{ newFile }}</div>
                        </form> -->
                        <div>
                          <input data-my-Directive type="file" name="file" ng-model="shipment.shipmentObject.file">
                          <p>
                            post request with this data:
                          </p>
                          <pre ng-repeat="(key, value) in fileLog">
                            {{key}} {{ value }}
                          </pre>
                        </div>

                    </uib-tab>

【问题讨论】:

    标签: javascript angularjs laravel http


    【解决方案1】:

    所以你得到一个空响应,因为你的条件语句不匹配,所以你只是返回你创建的空$fileArray

    if (isset($request->files) && is_array($request->files))
    

    检查是否有文件的正确方法是去:

    if($request->hasFile('file'))
    

    您需要了解的所有信息都可以在此处的官方文档中找到:

    https://laravel.com/docs/5.4/requests#files

    【讨论】:

    • 我没有收到空响应,响应为 200 OK,但它没有将其保存到数据库中。 @giollianosulit
    • 我认为您没有正确理解我的回答。您将获得 200,因为 您返回的是一个空数组。 if 语句中的代码永远不会运行。检查我上面的解决方案。
    • 我明白了,就像你提到的那样。 if($request->hasFile('file')) 并添加了一个 dd("here") 来调试它,我用邮递员试试。没有“这里”被打印出来。但是,当我为此更改 if 语句时: if($request->files){ 会打印 dd"here" 。所以这意味着 if 语句是正确的。当我将 dd“here” 放入 foreach 时,邮递员返回一个“[]”......这是为什么呢? @giollianosulit
    • 你的文件 是什么名字?我发布了答案,假设您有一个名为 file
    • 是的,它的命名文件 @giollianosulit
    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 2019-07-12
    • 2020-01-15
    • 2020-06-09
    • 1970-01-01
    • 2021-04-28
    相关资源
    最近更新 更多