如果是动态名称,如何获取存储在 /storage/public 中的图像名称
How can get the name of a image stored in /storage/public if was dynamic name
我的问题是我在 laravel 中的网站上上传了一张图片,但数据库使用一个奇怪的名称和扩展名保存了我本地存储的路径:
图片在 Storage/app/public 中上传正常,但使用了另一个名称(如哈希码):
现在,如何通过数据库查询在/Storage/Public中获取此名称,或者如何使用原始名称或ID上传图像?
代码:
表单上传:
<form class="formulario" method="POST" enctype='multipart/form-data' action="{{ route('add_taller') }}">
@csrf
<h4>Añade el titulo correspondiente</h4><input name="titulo">
<h4>Añade un logo al taller</h4><input type="file" name="icono" class="taller_form {{ $errors->has('name') ? 'alert alert-danger' : ''}}" />
{!! $errors->first('image', '<p class="alerta">:message</p>') !!}
<h4>Añade una descripción</h4><textarea name="descripcion" rows="10" cols="50" value="{{ old('textarea') }}"></textarea>
{!! $errors->first('string', '<p class="alerta">:message</p>') !!}
<button type="submit">Subir a la web</button>
</form>
在控制器中:
public function add_taller(Request $request)
{
$request->file('icono')->store('public');
$user = Auth::user();
DB::table('talleres')->insert([
'icono' =>$request->icono,
'titulo' => $request->titulo,
'descripcion' => $request->descripcion,
'user_id' => $user->id,
'fecha'=> now()]);
return view('home');
}
查看需要展示图片的地方:
@foreach($datos as $dato)
<div class="taller">
<div>
<img src="{{Storage::url($dato->icono)}}" alt="" srcset="" class="icon_taller">
</div>
<div>
<h4>{{$dato->titulo}}</h4>
<p>{{$dato->descripcion}}</p>
</div>
<div class="botones_area">
<button>Descarga</button>
<button>Contacto</button>
</div>
</div>
@endforeach
正如我所见,您没有使用文件扩展名保存路径。
当您使用 $request->file('icono')->store('public');
时,您会生成一个临时文件,文件扩展名由 Laravel 和 MIME 类型决定。
关于什么:
public function add_taller(Request $request)
{
$path = Storage::putFileAs(
'public', $request->file('icono'), Str::uuid()
);
$user = Auth::user();
DB::table('talleres')->insert([
'icono' => $path,
'titulo' => $request->titulo,
'descripcion' => $request->description,
'user_id' => $user->id,
'fecha'=> now()]
);
return view('home');
}
对于文件名,我使用 Str::uuid 函数生成具有不同 ID 的名称。对于存储文件,我使用了 Storage Laravel facade,在这里快速浏览一下:https://laravel.com/docs/8.x/filesystem#specifying-a-file-name
您如何看待这些变化?
我的问题是我在 laravel 中的网站上上传了一张图片,但数据库使用一个奇怪的名称和扩展名保存了我本地存储的路径:
图片在 Storage/app/public 中上传正常,但使用了另一个名称(如哈希码):
现在,如何通过数据库查询在/Storage/Public中获取此名称,或者如何使用原始名称或ID上传图像?
代码: 表单上传:
<form class="formulario" method="POST" enctype='multipart/form-data' action="{{ route('add_taller') }}">
@csrf
<h4>Añade el titulo correspondiente</h4><input name="titulo">
<h4>Añade un logo al taller</h4><input type="file" name="icono" class="taller_form {{ $errors->has('name') ? 'alert alert-danger' : ''}}" />
{!! $errors->first('image', '<p class="alerta">:message</p>') !!}
<h4>Añade una descripción</h4><textarea name="descripcion" rows="10" cols="50" value="{{ old('textarea') }}"></textarea>
{!! $errors->first('string', '<p class="alerta">:message</p>') !!}
<button type="submit">Subir a la web</button>
</form>
在控制器中:
public function add_taller(Request $request)
{
$request->file('icono')->store('public');
$user = Auth::user();
DB::table('talleres')->insert([
'icono' =>$request->icono,
'titulo' => $request->titulo,
'descripcion' => $request->descripcion,
'user_id' => $user->id,
'fecha'=> now()]);
return view('home');
}
查看需要展示图片的地方:
@foreach($datos as $dato)
<div class="taller">
<div>
<img src="{{Storage::url($dato->icono)}}" alt="" srcset="" class="icon_taller">
</div>
<div>
<h4>{{$dato->titulo}}</h4>
<p>{{$dato->descripcion}}</p>
</div>
<div class="botones_area">
<button>Descarga</button>
<button>Contacto</button>
</div>
</div>
@endforeach
正如我所见,您没有使用文件扩展名保存路径。
当您使用 $request->file('icono')->store('public');
时,您会生成一个临时文件,文件扩展名由 Laravel 和 MIME 类型决定。
关于什么:
public function add_taller(Request $request)
{
$path = Storage::putFileAs(
'public', $request->file('icono'), Str::uuid()
);
$user = Auth::user();
DB::table('talleres')->insert([
'icono' => $path,
'titulo' => $request->titulo,
'descripcion' => $request->description,
'user_id' => $user->id,
'fecha'=> now()]
);
return view('home');
}
对于文件名,我使用 Str::uuid 函数生成具有不同 ID 的名称。对于存储文件,我使用了 Storage Laravel facade,在这里快速浏览一下:https://laravel.com/docs/8.x/filesystem#specifying-a-file-name
您如何看待这些变化?