7

我正在尝试上传一些照片并使用 Laravel 函数中的构建来处理这个问题。但我一生都无法弄清楚如何正确地做到这一点。我已经能够实际上传一些东西,但我遇到了一些问题。这是我现在拥有的代码:

如果查看文档,发现这个函数:$file = Input::file('photo');我用过这个函数,它的内容$file是一个 的实例Symfony\Component\HttpFoundation\File\UploadedFile,正如文档告诉我们的,“扩展了 PHP SplFileInfo 类并提供了多种方法与文件交互。” http://laravel.com/docs/4.2/requests#files

然后我使用了这个函数Input::file('photo')->move($destinationPath);,它应该是服务器上所需文件夹中的文件。它确实做到了。但现在问题来了。现在所有上传的文件都有一个类似的文件名phpgoJnLc,并且没有扩展名。

我查看了可用的函数SplFileInfo并尝试getExtension了它给我一个空字符串,getFilename它也给了我类似phpgoJnLc.

然后我在互联网上环顾四周,发现了 Laravel 3 的一些代码,他们做了这样的事情:

$filename = Str::random(20) .'.'. File::extension(Input::file('photo.name'));

但是这样做的结果是只给我Str::random(20)一个点的结果。同样,没有文件扩展名。

那么,我做错了什么?如何使用 Laravel 4 上传文件?

4

3 回答 3

18

在同一个类文件中,我看到了一个getClientOriginalName()函数......

$file = Input::file('photo');
$file->move($destinationPath,$file->getClientOriginalName());

...假设您保留客户设置的原始名称...这可能是危险的,我的建议是对其进行一些安全检查。仅使用 获取扩展名->getClientOriginalExtension(),因此您也可以只保存该部分并在move()函数的第二个参数中添加一个随机字符串。

于 2013-04-14T19:02:00.177 回答
1

这对我有用,尤其是当您想更改上传图片的名称时:

$filename = 'New_Name'.'.'.Input::file('photo')->getClientOriginalExtension();
于 2015-01-13T04:29:11.753 回答
0

您还可以为具有原始文件扩展名的文件生成名称,如下所示:

$filename = Str::random(20) . '.' . Input::file('image')->guessExtension();

如果您尝试在 Laravel 4 中使用以下内容:

$filename = Str::random(20) .'.'. File::extension(Input::file('photo.name'));

你会得到这个错误:

'Call to undefined method Illuminate\Filesystem\Filesystem::guessExtension()'
于 2013-12-24T16:19:16.637 回答