2013-04-14 98 views
7

我正在尝试上传一些照片,并在Laravel函数中处理此内容。但我不能为了我的生活而弄清楚如何正确地做到这一点。我已经能够实际上传某些内容,但遇到了一些问题。这是代码,我现在所拥有的:Laravel 4文件上传

如果看了看文档,发现这个功能:$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上传文件?

回答

17

寻找在同一个类文件,我看到一个getClientOriginalName()功能...

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

...这AIS ssuming你,让您的客户端将原来的名字......这可能是危险的,做一些安全检查,这将是我的建议。获取扩展名仅与->getClientOriginalExtension()完成,因此您也可以只保存该部分&在move()函数的第二个参数之前添加一个随机字符串。

+0

你,我的朋友,刚刚救了我的一天!我怎么没有看到...?非常感谢你! – Crinsane

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

这对我有用,特别是当你想改变uplo的名字图片:

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

@ pathors.thank你。 – iCoders