22

他の情報の中でも、ユーザーが画像をアップロードするフォームがあります。データベース上の画像へのパスを保存public/img/し、サーバー上のフォルダーに画像を保存したいと考えています。

フォームは次を使用して開かれました:{{ Form::open(['route'=>'pizzas.store', 'files'=>true]) }}ファイルを POST できるようにします。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

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

@Reflicによって与えられた答えは正しいかもしれません...しかし私にとってはそうではありません....
このパスは私にとってはうまくいきました。
URLから「public /」を削除したためかもしれません...ありがとう。

于 2014-05-26T12:19:35.157 に答える
1

相対パスも記述できます。のように

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

また

$destinationPath= 'public/img/';

于 2016-01-02T21:45:56.627 に答える
1

私は同じ問題を抱えていました。私は自分のコードについてすべて正しいことをしました。

public_path()

マイフォルダーの先頭に追加されませんでした

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

ファイル名を変更するためにこれも行いました

ファイル拡張子を取得しました

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

それだけです、ファイル名が変更されました。Laravelは確かに素晴らしい

于 2014-06-02T22:37:12.250 に答える