Laravel сохранить изображение из формданных - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь сохранить изображение, отправленное из моего javascript (используя vue), в качестве формоданных, я пытаюсь правильно сохранить его в моей базе данных и создать папку в своем каталоге хранения.

Пока я это сделалследующее:

// the axios works properly
submit () {
    const formData = new FormData();
    formData.append('thumbnail', this.selectedImageFile);
    formData.append('title', this.title)
    formData.append('image', this.image)
    formData.append('thumbnail', this.thumbnail)
    formData.append('day', this.day)

    if (this.$refs.form.validate()) {
        axios.post('/event/store', formData)
        .then((response) => {
            console.log("event saved: " + response.data);
        })
        .catch((error) => {
            console.log("error trying to save event: " + response);
        })
    }
},

В методе store моего контроллера я делаю следующее:

public function store(EventRequest $request)
{
    $event = $this->event->create([
        'title' => $request->title,
        'image' => $request->image,
        'thumbnail' => $request->thumbnail
    ]);

    $this->event->createDir($request->file('image'), $request->file('thumbnail'), $request->title);

    if($event) {
        return response()->json('success');
    }            

    return response()->json('An error accured');
}

Метод createDir в create в моем репозитории

public function createDir($image, $thumbnail, $title)
{
    $image->store($title.'/image');
    $thumbnail->store($title.'/thumbnail');
}

Работает сообщение Axios,$request->file('image') и $request->file('thumbnail') возвращают ноль, тогда как, если я вывожу данные формы в своей консоли, я получаю правильный журнал.

Я хотел бы сохранить имя файла в моей базе данных и создать папку в хранилище с обоими изображениями.

Я не уверен, как управлять этим с помощью FormData.

1 Ответ

0 голосов
/ 07 октября 2018

Просто обновите свой метод хранилища следующим образом:

public function store(EventRequest $request)
{
    $event = $this->event->create([
        'title' => $request->title,
        'image' => $request->image,
        'thumbnail' => $request->thumbnail
    ]);

    $request->file('image')->store($request->title.'/image');
    $request->file('thumbnail')->store($request->title.'/thumbnail');

    if($event) {
        return response()->json('success');
    }            

    return response()->json('An error accured');
}

Это запросит файлы из ваших FormData, сохранит их в папке хранения и добавит случайное хешированное имя.Вот так:

    $request->file('image')->store($request->title.'/image');
    $request->file('thumbnail')->store($request->title.'/thumbnail');

Перемещает изображения, например, в это место:

storage/app/dragon/thumbnail/abcaksdhsadui123.png // your request title is in this example dragon
storage/app/dragon/image/abcaksdhsadui123.png
...