为什么将 CRUD 图像发送到临时文件?

分享于2023年03月01日 laravel php 问答
【问题标题】:Why are CRUD images sent to temp file?为什么将 CRUD 图像发送到临时文件?
【发布时间】:2023-02-24 14:22:31
【问题描述】:

在我的 Laravel 应用程序中,我创建了一个页面,我可以在其中添加新书到表格中,每当我尝试添加或编辑新书时,尽管我已经指定了保存路径目标,但它的照片会发送到临时文件,这是什么原因?

我的职能:

public function store(Request $request)
{
 $request->validate([
   'photo' => 'required',
   'parts' => 'required', 
   'writer_name' => 'required', 
   'title' => 'required', 
   'field' => 'required', 
   'photo' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
 ]);

 $input = $request->all();

 if ($photo = $request->file('photo')) {
   $destinationPath = 'uploads/books';
   $profileImage = date('YmdHis') . "." . $photo->getClientOriginalExtension();
   $photo->move($destinationPath, $profileImage);
   $input['photo'] = $profileImage;
 }
     
 Book::create($input);
      
 return redirect()->route('books.index')->with('success','Book inserted successfully.');
}

我的指数:

@foreach ($books as $book)
  
    
    {{ $book->copies }}
    {{ $book->note }}
    {{ $book->parts }}
    {{ $book->publication }}
    {{ $book->documentation }}
    {{ $book->review }}
    {{ $book->writer_name }}
    {{ $book->title }}
    {{ $book->field }}
    {{ $book->created_at }}
    {{ ++$i }}
}

我的模型:

class Book extends Model
{
  use HasFactory;
  protected $fillable = [
    'photo', 'copies', 'note', 'parts', 'publication', 'documentation', 'review', 'writer_name', 'title', 'field', 'created_at'
  ];
}

  • 你尝试过什么来解决这个问题?你卡在哪儿了?
  • 你试过这个吗 $filePath = public_path('/uploads/books/'); 也删除两次验证 photo 尝试将其合二为一
  • @Nico Haase 我试图将图像保存重定向到另一个文件(上传/书籍),它将图像存储在那里,但在数据库中它显示临时目标。
  • 你试过我提供的了吗
  • “但在数据库中它显示了临时目的地”——设置模型最终图像路径的代码在哪里?

【解决方案1】:

这是答案:

if(!empty($request->hasFile('photo'))){
     $image = $request->file('photo');
     $photoname = date('YmdHis').'.'.$image->extension();
     $filePath = public_path('/uploads/books/');
     $image->move($filePath, $photoname);
     $input['photo'] = $photoname;
            
     }

【讨论】:

  • 请在您的答案中添加一些解释,以便其他人可以从中学习。你改变了什么,为什么?