【问题标题】:Laravel 4.2 Input::fileLaravel 4.2 输入::文件
【发布时间】:2020-04-01 16:13:09
【问题描述】:

尝试将文件上传到我的测试 api。为了测试,我尝试检查输入是否有文件并且它返回 true。问题是当代码尝试移动该文件时。搜索 google 显示几乎与我相同的代码;

if (Input::hasFile('attachments')) {
            $path = base_path().'/assets';
            $files = Input::file('attachments');
            $data = [];

            foreach ($files as $file) {
                $data[] = $file->getClientOriginalExtension();

                $uuid = Uuid::uuid1();
                $extension = $file->getClientOriginalExtension();
                $filename = $uuid.'.'.$extension;
                $file->move($path, $filename);
            }

            return Response::json($data);
        } else {
            return 'no file';
        }

使用 Paw 多部分进行发布请求,在 json 上给出此结果

还是想不通。任何帮助都感激不尽。非常感谢你们。

【问题讨论】:

  • 你为什么不转储$files 这样你就可以看到它是什么
  • 这里是 dd($files) 对象(Symfony\Component\HttpFoundation\File\UploadedFile)#10 (7) { ["test":"Symfony\Component\HttpFoundation\File\UploadedFile": private]=> bool(false) ["originalName":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> string(40) "屏幕截图 2019-12-05 下午 1.53.47.png" [ "mimeType":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> string(9) "image/png ["pathName":"SplFileInfo":private]=> string(26) "/private/var /tmp/phpcLdzTa" ["fileName":"SplFileInfo":private]=> 字符串(9) "phpcLdzTa" }
  • 我不需要看它,它是让你看它是什么,因为 foreach 没有运行,你试图迭代一些不是你认为的东西,比如单个上传文件对象,迭代该对象不会有多大好处...简而言之,您只有一个文件,不多,您的输入是单个输入而不是输入数组
  • 是的,尝试迭代 input::file 但仍然没有价值
  • Input::file 似乎不可迭代。你能分享你的视图定义吗?

标签: php json laravel api post


【解决方案1】:

我不知道您为什么要尝试迭代,但没有理由这样做,$files 是一个上传的文件。

只需删除循环,因为没有可迭代的内容。

if (Input::hasFile('attachments')) {
    $path = base_path().'/assets';
    $file = Input::file('attachments');

    $uuid = Uuid::uuid1();
    $extension = $file->getClientOriginalExtension();
    $filename = $uuid.'.'.$extension;
    $file->move($path, $filename);

    return Response::json($extension);
} else {
    return 'no file';
}

如果您想拥有多个文件,则需要将输入设置命名为数组attachments[]。您正在发送attachments,它始终是一个值。如果您发送了一个数组,那么您可能需要迭代一些东西。

【讨论】:

  • 我读到你的回答有点晚了,在我有机会阅读你的帖子之前就明白了。无论如何,非常感谢您花时间回答和帮助我
  • 别担心,你终于到了那里,祝你的项目好运......我强烈建议你升级你的 Laravel 安装,因为此时 4.2 已经非常过时了
【解决方案2】:

好的;所以像[] 这样简单的事情让我很难弄清楚。我所做的只是添加[];而不仅仅是附件,我将附件 [] 作为发布请求名称,在我的控制器中,我保留了 Input::file('attachments')

感谢大家的指导和帮助。以艰难而疲惫的方式解决问题。

【讨论】:

    猜你喜欢
    • 2015-11-16
    • 1970-01-01
    • 2015-09-09
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2018-01-10
    • 2017-05-27
    相关资源
    最近更新 更多