22

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

使用:打开表单,{{ Form::open(['route'=>'pizzas.store', 'files'=>true]) }}以便它能够发布文件。检查 HTML 我有以下内容:

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

我可以 POST 到我的控制器并按预期从表单接收所有数据。处理文件的方法如下:

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" }

我究竟做错了什么?

4

5 回答 5

33

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

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

于 2013-09-27T21:45:10.023 回答
3

由于您似乎使用的是 php 5.4,您也可以考虑使用Stapler。它现在非常稳定(很快就会退出测试版),并且可以让您免于编写您现在必须编写的大量样板文件。

于 2013-11-13T03:01:20.353 回答
1
$destinationPath= public_path() . 'img/';

@Reflic 给出的答案可能是正确的……但不适合我……
这条路对我有用。
可能是因为我从 url 中删除了“public/”...谢谢。

于 2014-05-26T12:19:35.157 回答
1

我有同样的问题。除了

public_path()

没有添加到我的文件夹中

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

我也这样做是为了更改我的文件名

我得到了文件扩展名

$extension = Input::file('YourFileName')->getClientOriginalExtension();
$filename = WhateverYouWantHere . '.' . $extension;

就是这样,文件名改变了。Laravel 确实很棒

于 2014-06-02T22:37:12.250 回答
1

你也可以写相对路径。就像

$destinationPath="resources/assets/images/";

或者

$destinationPath= 'public/img/';

于 2016-01-02T21:45:56.627 回答