как сохранить изображение с другим именем в laravel 5.4 - PullRequest
0 голосов
/ 13 сентября 2018

Я делаю операцию CRUD в laravel 5.4. Я сохраняю изображение в базе данных и хранилище. Я сделал это, но не со случайным именем. Значит, если имя изображения - logo.jpg, мне нужно другое случайное имя этого изображения сохранить в базе данных, а также в папке.

Я попробовал это. Но если я сохраню два разных изображения с одним и тем же именем, оно будет заменено новым.

Мой web.php:

Route::resource('todo','todocontroller');

Мой todocontroller.php:

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\todo;

class todocontroller extends Controller
{

 public function create()
{
    return view('todo.create');
}
    /**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
    $todo = new todo;
    $this->validate($request,[
        'title' => 'required|unique:todos',
        'file' => 'image|mimes:jpeg,png,jpg,gif',
        'body' => 'required',

    ],
    [
        'title.required' => 'Title can not be empty',
        'unique' => 'Already inserted. Please try another.',
        'file.image' => 'Upload only JPEG OR PNG',
        'body.required' => 'Body can not be empty',
    ]);

    if ($request->hasFile('file')) {
        $images = $request->file->getClientOriginalName();
        $request->file->storeAs('public/images',$images);
        $todo->image = $images;
    }

    $todo->title = $request->title;

    $todo->body = $request->body;
    $todo->save();
    session()->flash('message','Inserted Successfully');
    return redirect('todo');
 }
}

Мой файл create.blade.php:

@extends('layout.app')

@section('body')
<br>
<a href="../todo" class="btn btn-info">Back</a>
    <h1>Create new item</h1><br>
    <form action="../todo"  method="POST" enctype="multipart/form-data">
        {{csrf_field()}}
        <input type="text" name="title" value="{{old('title')}}" placeholder="title">{{$errors->first('title',':message')}}
        <br>
        <input type="file" name="file" placeholder="Image">{{$errors->first('file',':message')}}
        <br>
        <textarea rows="5" name="body" placeholder="body">{{old('body')}}</textarea>{{$errors->first('body',':message')}}
        <button type="submit">Submit</button>

    </form>

</div>

@endsection

Ответы [ 4 ]

0 голосов
/ 13 сентября 2018

Если вы хотите сохранить изображение под другим именем, используйте этот метод: storeAs()

Из документов Laravel:

https://laravel.com/docs/5.7/filesystem#storing-files Указание имени файла

0 голосов
/ 13 сентября 2018

Очень расплывчатый вопрос, но если я правильно понял, то вы можете попробовать добавить случайную строку hash к имени вашего изображения.

Может быть, попытаться сделать это так:

$images = md5(microtime()).'_'.$request->file->getClientOriginalName();

Это добавит microtime к вашему изображению и сохранит его в базе данных.

0 голосов
/ 13 сентября 2018

Попробуйте следующий код.

if ($request->hasFile('file')) {
        $images = $request->file->getClientOriginalName();
        $images = time().'_'.$images; // Add current time before image name
        $request->file->storeAs('public/images',$images);
        $todo->image = $images;
    }
0 голосов
/ 13 сентября 2018

Пожалуйста, попробуйте этот код обновления кода.time() получить ток timestamp.

 if ($request->hasFile('file')) {
        $file = $request->file('file');
        $extension = $file->getClientOriginalExtension(); // getting image extension
          $filename = time().'.'.$extension;
          $file->move('public/images/', $filename);
        $todo->image = $filename;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...