繁体   English   中英

Laravel 4文件上传

[英]Laravel 4 file upload

我正在尝试上传一些照片并使用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上传文件?

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

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

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

这对我有用,特别是当您想要更改上传图像的名称时:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM