如何解决如何使用laravel同时上传图片和视频
$request->validate([
'title'=> 'required','description' => 'required','file' => 'required|mimes:jpg,jpeg,png|max:2048','video' => 'required|mimes:mp4'
]);
$film= Film::create([
'title' => $request->title,'slug' => Str::slug($request->title),'description' => $request->description,'user_id' => auth()->id()
]);
$file = new Film();
if($request->file('file')) {
$file_name = time().'_'.$request->file->getClientOriginalName();
$file_path = $request->file('file')->storeAs('uploads',$file_name,'public');
$file->name = time().'_'.$request->file->getClientOriginalName();
$file->file = '/storage/' . $file_path;
$film->update(['file' => $file_name]);
$film->update(['path' => $file_path]);
return response()->json(['success'=>'File uploaded successfully.']);
}
if ($request->file('video')){
$file_name = time().'_'.$request->file->getClientOriginalName();
$file_path = $request->file('video')->storeAs('uploads','public');
$file->name = time().'_'.$request->file->getClientOriginalName();
$file->file = '/storage/' . $file_path;
$film->update(['video' => $file_name]);
$film->update(['videoPath' => $file_path]);
return response()->json(['success'=>'File uploaded successfully.']);
}
解决方法
这是因为您在处理图像文件后返回响应,因此无法达到视频的条件。如果你想同时处理两个就在所有操作完成后返回。
$request->validate([
'title'=> 'required','description' => 'required','file' => 'required|mimes:jpg,jpeg,png|max:2048','video' => 'required|mimes:mp4'
]);
$film= Film::create([
'title' => $request->title,'slug' => Str::slug($request->title),'description' => $request->description,'user_id' => auth()->id()
]);
if($request->file('file')) {
$file_name = time().'_'.$request->file->getClientOriginalName();
$file_path = $request->file('file')->storeAs('uploads',$file_name,'public');
$film->update([
'file' => $file_name,'path' => $file_path
]);
}
if ($request->file('video')){
$file_name = time().'_'.$request->video->getClientOriginalName();
$file_path = $request->file('video')->storeAs('uploads','public');
$film->update([
'video' => $file_name,'videoPath' => $file_path
]);
}
return response()->json(['success'=>'Files uploaded successfully.']);
如果每个条件中的文件都被成功处理,您还可以添加额外的检查。
$file
变量是不必要的,它甚至没有保存,因此也可以删除。
至于它上传两次的原因,您在 ->file
条件内再次调用 video
,它应该是 ->video
。
顺便说一句,您可以通过传递多个数组项而不是为每个属性调用 update 来一次更新多个字段,这可以节省您的数据库请求。
,jech chua,谢谢它的工作,但它上传了两次图像。
也许我的刀片有问题
<form action="/film" class="form" method="POST" enctype="multipart/form-data">
@csrf
<div class="f">
<div class="sect1">
<input type="text" class="input" name="title" placeholder="Title..">
<textarea name="description" class="textarea" placeholder="Description.."></textarea>
<h2>Upload image</h2><input type="file" name="file" class="file">
</div>
<div class="dropz" id="image-upload">
<h2>Upload video</h2>
<input type="file" name="video">
</div>
</div>
<button type="submit" class="buttn">Create film</button>
</form>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。