Laravel 4 文件上传

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上传文件?
3个回答

18

我查看了同一个类文件,发现有一个getClientOriginalName()函数...

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

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


你,朋友,刚刚救了我的一天!我怎么没看出来呢...?非常感谢你! - Crinsane

1

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

$filename = 'New_Name'.'.'.Input::file('photo')->getClientOriginalExtension();

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()'

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