Laravel-excel: 关闭序列化失败:不允许序列化 'Illuminate\Http\UploadedFile'

创建于 2017-06-13  ·  3评论  ·  资料来源: Maatwebsite/Laravel-Excel

[问题]

maatwebsite/excel 2.1, Laravel 5.4

大家好。 我正在尝试导入一个 excel 文件,但我收到一条错误消息,提示“关闭序列化失败:不允许序列化 'Illuminate\Http\UploadedFile'”。 我已经尝试了一些故障排除,但我不明白为什么这个问题仍然发生。 这是我用来处理导入 excel 文件的源代码。

if($request->hasFile('file')){
     $file = $request->file('file')->getRealPath();
     \Excel::filter('chunk')->load($file)->chunk(200, function($result) use ($request){
        foreach ($result as $item) {
           if(collect($item)->has('title') && collect($item)->has('category_id')  && collect($item)->has('file')){
                Content::create([
                     'title' => $item->title,
                     'category_id' => $item->category_id,
                     'file' => $item->file,
                     'reference' => $request->input('reference')
                ]);
           }
        }
       });
      return redirect()->back();
}

请帮我解决这个问题。

最有用的评论

您不能将$request传递到闭包中,因为它会被序列化和排队。 您必须传递显式变量。

试试这个:

if($request->hasFile('file')){
     $file = $request->file('file')->getRealPath();
    $reference = $request->input('reference');
     \Excel::filter('chunk')->load($file)->chunk(200, function($result) use ($reference){
        foreach ($result as $item) {
           if(collect($item)->has('title') && collect($item)->has('category_id')  && collect($item)->has('file')){
                Content::create([
                     'title' => $item->title,
                     'category_id' => $item->category_id,
                     'file' => $item->file,
                     'reference' => $reference
                ]);
           }
        }
       });
      return redirect()->back();
}

所有3条评论

您不能将$request传递到闭包中,因为它会被序列化和排队。 您必须传递显式变量。

试试这个:

if($request->hasFile('file')){
     $file = $request->file('file')->getRealPath();
    $reference = $request->input('reference');
     \Excel::filter('chunk')->load($file)->chunk(200, function($result) use ($reference){
        foreach ($result as $item) {
           if(collect($item)->has('title') && collect($item)->has('category_id')  && collect($item)->has('file')){
                Content::create([
                     'title' => $item->title,
                     'category_id' => $item->category_id,
                     'file' => $item->file,
                     'reference' => $reference
                ]);
           }
        }
       });
      return redirect()->back();
}

谢谢@patrickbrouwers。 这救了我的命 :+1: 。

谢谢@patrickbrouwers。

此页面是否有帮助?
0 / 5 - 0 等级