如何设置单个上传文件名?

时间:2016-12-08 20:07:08

标签: laravel-5

我有一个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保存到数据库,但似乎默认保存文件名。

1 个答案:

答案 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']);

不确定这是最好的方法(总是另辟蹊径),但它对我有用。