我有一个Laravel 5.3应用程序,其中包含一个表单,用户可以使用多个文件字段上传多个文件。该表单的工作原理是文件可以按照我的预期上传并移植到destinationPath,但我似乎无法更改每个文件' filename'值。它一直保存文件名值为php **。tmp。
这是我控制器中的foreach;
$files = $request->files;
foreach($files as $file){
$destinationPath = 'images/forms'; // upload path
$filename = $file->getClientOriginalName(); // get image name
$file->move($destinationPath, $filename); // uploading file to given path
$file->filename = $filename;
}
如果我在foreach中dd($filename)
和dd($file->filename)
,我会获得我正在寻找的值(原始名称),但如果我dd($files)
在该foreach之外,则将文件名设置为临时php值。
我错过了什么?感谢。
修改
文件对象如下所示;
-test:false
-originalName:" sample_header_1280.png"
-mimeType:" image / png"
-size:51038
-error:0
路径:" C:\ xampp \ tmp"
filename:" php7240.tmp"
basename:" php7240.tmp"
路径名:" C:\ xampp \ tmp \ php7240.tmp"
扩展名:" tmp"
realPath:" C:\ xampp \ tmp \ php7240.tmp"
我正在尝试将originalName保存到数据库,但似乎默认保存文件名。
答案 0 :(得分:0)
使用foreach for Input :: file不是他接近这里。如果从同一字段上传多个文件 - 那么您可以使用foreach循环,移动和保存。
要从同一表单上的多个文件输入上传文件,您需要做的就是单独处理每个输入 - 就像使用任何其他表单一样。
在我的例子中,我在我的控制器中做到了这一点;
$data['image1'] = Input::file('image1')->getClientOriginalName();
Input::file('image1')->move($destinationPath, $data['image1']);
$data['image2'] = Input::file('image2')->getClientOriginalName();
Input::file('image2')->move($destinationPath, $data['image2']);
不确定这是最好的方法(总是另辟蹊径),但它对我有用。