Laravel 5.4 文件存在则替换
Laravel 5.4 replace file if exist
我需要解决一个小小的不便,即在修改关联的注册表时出现图像更新。
当我修改注册表时,我想替换目录中的关联文件。
这是我的 table 结构:
Schema::create('institutions', function(Blueprint $table)
{
$table->engine = 'InnoDB';
$table->increments('id');
$table->string('name')->unique();
$table->string('initials')->nullable();
$table->string('description')->nullable();
$table->string('avatar')->default('default.jpg');
$table->timestamps();
});
这是我在控制器上的更新方法:
public function update(Request $request, $id)
{
//
$institution = $this->institution->find($id);
try
{
$institution->update($request->all());
if($request->hasFile('avatar')){
$avatar = $request->file('avatar');
$filename = time() . '.' . $avatar->getClientOriginalExtension();
Image::make($avatar)->resize(250, 205)->save( public_path('uploads/institutions/' . $filename ) );
$institution->avatar = $filename;
$institution->save();
}
$updated = $institution;
$message = flash('Institución actualizada correctamente!!!', 'success');
return redirect()->route('instituciones.index')->with('message', $message);
}
catch(\Illuminate\Database\QueryException $e)
{
$message = flash('La institución no se actualizó correctamente!!!', 'danger');
return redirect()->route('institutions.create')->with('message', $message);
}
}
我试过各种方法都没有成功。
上传的图片必须具有相同的文件名才能替换旧的,但在这种情况下不会替换,因为time()
方法。
您可以通过从数据库中获取文件名来删除旧图像并保存新图像
//find data by id
$institution = $this->institution->find($id);
$filename = public_path('uploads/institutions/').$institution->avatar;
if(File::exists($filename)) {
$avatar = $request->file('avatar');
$filename_new = time() . '.' . $avatar->getClientOriginalExtension();
Image::make($avatar)->resize(250, 205)->save( public_path('uploads/institutions/' . $filename_new ) );
//update filename to database
$institution->avatar = $filename_new;
$institution->save();
//Found existing file then delete
File::delete($filename); // or unlink($filename);
}
希望对您有所帮助
我需要解决一个小小的不便,即在修改关联的注册表时出现图像更新。
当我修改注册表时,我想替换目录中的关联文件。
这是我的 table 结构:
Schema::create('institutions', function(Blueprint $table)
{
$table->engine = 'InnoDB';
$table->increments('id');
$table->string('name')->unique();
$table->string('initials')->nullable();
$table->string('description')->nullable();
$table->string('avatar')->default('default.jpg');
$table->timestamps();
});
这是我在控制器上的更新方法:
public function update(Request $request, $id)
{
//
$institution = $this->institution->find($id);
try
{
$institution->update($request->all());
if($request->hasFile('avatar')){
$avatar = $request->file('avatar');
$filename = time() . '.' . $avatar->getClientOriginalExtension();
Image::make($avatar)->resize(250, 205)->save( public_path('uploads/institutions/' . $filename ) );
$institution->avatar = $filename;
$institution->save();
}
$updated = $institution;
$message = flash('Institución actualizada correctamente!!!', 'success');
return redirect()->route('instituciones.index')->with('message', $message);
}
catch(\Illuminate\Database\QueryException $e)
{
$message = flash('La institución no se actualizó correctamente!!!', 'danger');
return redirect()->route('institutions.create')->with('message', $message);
}
}
我试过各种方法都没有成功。
上传的图片必须具有相同的文件名才能替换旧的,但在这种情况下不会替换,因为time()
方法。
您可以通过从数据库中获取文件名来删除旧图像并保存新图像
//find data by id
$institution = $this->institution->find($id);
$filename = public_path('uploads/institutions/').$institution->avatar;
if(File::exists($filename)) {
$avatar = $request->file('avatar');
$filename_new = time() . '.' . $avatar->getClientOriginalExtension();
Image::make($avatar)->resize(250, 205)->save( public_path('uploads/institutions/' . $filename_new ) );
//update filename to database
$institution->avatar = $filename_new;
$institution->save();
//Found existing file then delete
File::delete($filename); // or unlink($filename);
}
希望对您有所帮助