Laravel获取文件名

45

我基本上只想获取文件的名称,我是这样获取的:

$inputPdf = $request->file('input_pdf');

如果我 dd($inputPdf),它会输出 null


输入为空(未提供文件)或您没有获得正确的输入名称。 - Arcesilas
1
提供相关的HTML或任何信息可能会很有用。目前为止,我们无法说更多:没有文件。我们不知道您在浏览器中正在做什么,您的HTML是什么样子,或者类似的任何信息。 - Arcesilas
4个回答

112
  1. 如文档中所述,要获取文件名:

您可以使用文件方法访问包含在 Illuminate\Http\Request 实例中的上传文件。文件方法返回的对象是 Symfony\Component\HttpFoundation\File\UploadedFile 类的实例,它扩展了 PHP SplFileInfo 类并提供了各种与文件交互的方法。

UploadedFile 实例上还有多种其他方法可用。有关这些方法的更多信息,请查看类的API 文档

所以您可以使用此方法:getClientOriginalName()

http://api.symfony.com/3.0/Symfony/Component/HttpFoundation/File/UploadedFile.html#method_getClientOriginalName

$request->file('input_pdf')->getClientOriginalName();

会返回文件名。

您可以这样做来检查文件是否存在,然后再调用相关方法:

if ($request->hasFile('input_pdf')) {
    return $request->file('input_pdf')->getClientOriginalName();
} else {
    return 'no file!'
}
  1. 为解决dd($request->file('input_pdf'))返回null的问题,请检查您是否使用了正确的文件名。您可以尝试dd($request),并查看其中是否有任何文件。在查看Request对象的转储时,您可以检查文件名。

1
你的方法中是否也传递了 Request $request 参数? - Andy Holmes
1
因为你们没有完全阅读问题:你们提出了一些不相关的东西:没有文件。这是主要问题,正如问题中所提到的那样。 - Arcesilas
1
不,这个问题我第一次打开时就在这里了。这个问题根本没有被编辑过。 - Arcesilas
1
好的,我想我明白了,就像你们说的那样,输入的名称是错误的,只是一个语法问题,我写成了“-”而不是“_”。如果可以的话,请勾选这个选项。 - John Does Legacy
1
再次感谢您在我询问有关负投票的问题时提供的评论。这将提醒我在回答问题之前仔细阅读问题! - haakym
显示剩余9条评论

13
$request->file->getClientOriginalName();

点击这里 了解更多方法。


这个错误提示是因为在一个非对象上调用了getClientOriginalName()成员函数。 - John Does Legacy
1
请确保您正在发布一个文件,您可以通过执行dd($request)来查看请求对象的内容。同时,请确保您的表单(在前端)接受文件输入(enctype)。 - ExohJosh

2
我认为你忘记添加了


enctype="multipart/form-data"

在您的表单中。或者如果您使用了 Laravel 的 HTML 服务提供者,则使用:
{!! Form::open(array('files' => true)) !!}

谢谢,但我正在使用它。 - John Does Legacy
2
请问您能否添加更多的代码片段,例如您的控制器方法和HTML代码。 - Parvez Rahaman

1

请确保您使用了正确的输入名称。

$request->image->getClientOriginalName();

<input type="file" name="image">


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接