拉拉维尔 4 - 文件上传

2022-08-30 19:08:02

我有一个表格,其中有其他信息,用户将上传图像。我想将图像的路径存储在数据库上,并将图像保存到服务器上的文件夹中。public/img/

该表单是使用:打开的,以便它能够POST文件。检查HTML,我有一个folowing:{{ Form::open(['route'=>'pizzas.store', 'files'=>true]) }}

<form method="POST" action="http://mypizza/pizzas" 
  accept-charset="UTF-8" enctype="multipart/form-data">

我可以开机自检到我的控制器,并按预期从表格接收所有数据。处理该文件的方法如下:

public function store() {
    //TODO -  Validation

    $destinationPath = '';
    $filename        = '';

    if (Input::hasFile('image')) {
        $file            = Input::file('image');
        $destinationPath = '/img/';
        $filename        = str_random(6) . '_' . $file->getClientOriginalName();
        $uploadSuccess   = $file->move($destinationPath, $filename);
    }


    $pizza = Pizza::create(['name'       => Input::get('name'),
                           'price'       => Input::get('price'),
                           'ingredients' => Input::get('ingredients'),
                           'active'      => Input::get('active'),
                           'path'        => $destinationPath . $filename]);

    if ($pizza) {
        return Redirect::route('pizzas.show', $pizza->id);
    }

    //TODO - else
}

当我选择“文件”并提交表单时,除了文件夹中没有保存任何文件之外,所有内容似乎都正常工作。数据库正确注册文件路径和名称。/img

在块之后运行,我得到以下内容:dd($uploadSuccess);if { ...}

object(Symfony\Component\HttpFoundation\File\File)#220 (2) {
  ["pathName":"SplFileInfo":private]=> string(17) "/img\YZmLw7_2.jpg"
  ["fileName":"SplFileInfo":private]=> string(12) "YZmLw7_2.jpg" }

我做错了什么?


答案 1

您的$destination_path 是错误的。您必须在变量$destination中包含 /public 目录的路径,如下所示:

$destinationPath = public_path().'/img/';


答案 2

由于您似乎使用的是 php 5.4,因此您也可以考虑使用 Stapler。它现在非常稳定(很快就会退出测试版),并且可以将您从您现在必须编写的许多样板中节省出来。


推荐