php - 上传多个文件时出现“调用数组上的成员函数 getClientOriginalName()”错误
问题描述
我有一个接受多个输入的表单,其中一部分是上传。该表单接受其他形式的输入,但当我尝试上传文件时出现错误。
上传表格的一部分是:
{!! Form::label('downloadable_files', 'Downloadable files', ['class' => 'control-label']) !!}
{!! Form::file('downloadable_files[]', [
'multiple',
'class' => 'form-control file-upload',
'data-url' => route('admin.media.upload'),
'data-bucket' => 'downloadable_files',
'data-filekey' => 'downloadable_files',]) !!}
控制器方法是:
public function store(StoreLessonsRequest $request)
{
if (! Gate::allows('lesson_create')) {
return abort(401);
}
$request = $this->saveFiles($request);
$lesson = Lesson::create($request->all()
+ ['position' => Lesson::where('course_id', $request->course_id)->max('position') + 1]);
foreach ($request->input('downloadable_files_id', []) as $index => $id) {
$model = config('laravel-medialibrary.media_model');
$file = $model::find($id);
$file->model_id = $lesson->id;
$file->save();
}
return redirect()->route('admin.lessons.index', ['course_id' => $request->course_id]);}
该savesFiles()
方法在 FileUploadTraid.php 中:
public function saveFiles(Request $request)
{
if (! file_exists(public_path('uploads'))) {
mkdir(public_path('uploads'), 0777);
mkdir(public_path('uploads/thumb'), 0777);
}
$finalRequest = $request;
foreach ($request->all() as $key => $value) {
if ($request->hasFile($key)) {
if ($request->has($key . '_max_width') && $request->has($key . '_max_height')) {
// Check file width
$filename = time() . '-' . $request->file($key)->getClientOriginalName();
$file = $request->file($key);
$image = Image::make($file);
if (! file_exists(public_path('uploads/thumb'))) {
mkdir(public_path('uploads/thumb'), 0777, true);
}
Image::make($file)->resize(50, 50)->save(public_path('uploads/thumb') . '/' . $filename);
$width = $image->width();
$height = $image->height();
if ($width > $request->{$key . '_max_width'} && $height > $request->{$key . '_max_height'}) {
$image->resize($request->{$key . '_max_width'}, $request->{$key . '_max_height'});
} elseif ($width > $request->{$key . '_max_width'}) {
$image->resize($request->{$key . '_max_width'}, null, function ($constraint) {
$constraint->aspectRatio();
});
} elseif ($height > $request->{$key . '_max_width'}) {
$image->resize(null, $request->{$key . '_max_height'}, function ($constraint) {
$constraint->aspectRatio();
});
}
Image::make($file)->resize(320, 150)->save(public_path('uploads') . '/' . $filename);
$finalRequest = new Request(array_merge($finalRequest->all(), [$key => $filename]));
} else {
***$filename = time() . '-' . $request->file($key)->getClientOriginalName();***
$request->file($key)->move(public_path('uploads'), $filename);
$finalRequest = new Request(array_merge($finalRequest->all(), [$key => $filename]));
}
}
}
return $finalRequest;
}
}
表单的一部分接受单次上传,但多次上传的部分似乎不起作用。我不断收到错误:
Call to a member function getClientOriginalName() on array
in FileUploadTrait.php line 50
at LessonsController->saveFiles(object(StoreLessonsRequest))
in LessonsController.php line 156
at LessonsController->update(object(StoreLessonsRequest), '1')
更新: FileUploadTrait.php 中的错误行以粗体显示(或带有星号。
解决方案
-in your case you are not giving only the name of the file but all the
inforamtions of the file make a dd($request->file($key)) and search for the
your filename for example : ex.pnj and access it
这是我的代码:在我的控制器中
public function uploadFiles(Request $request){
$request->validate([
'files'=>'required',
'files.*'=>'image|mimes:jpeg,png,jpg,svg|max:2048'
]);
$files = $request->file('files');
foreach ($files as $file) {
$name = time(). $file->getClientOriginalName();
$file->move('gallery',$name);
Photo::create([
'name'=>$name,
'user_id'=>auth()->user()->id
]);
}
flashy()->success('le contenu a bien été ajouté.');
return back();
}
在我的 html 文件中
<form action="{{route('upload')}}" method="POST"
enctype="multipart/form-data">
@csrf
<input
type="file"
multiple
id="btn-gallery"
name="files[]"
label="Déposez les fichiers ici ou cliquez pour les télécharger.."
help="Téléchargez les fichiers ici et ils ne seront pas envoyés immédiatement"
is="drop-files"
/>
<button type="submit" id="btn-upload" class="btn btn-primary mt-1">télécharger</button>
</form>
推荐阅读
- angular - 需要暂停执行我的应用程序,直到我的 firebase 上传功能返回下载 url
- r - 是否有用于 ggplot 的字体系列的常用名称列表?
- php - "App::getLocale()" 返回默认语言而不是自定义服务提供者中的当前语言
- r - 在 data.table 中按时间获取一个变量与数据集其余部分的显着性相关性
- c# - 如何从 C# 读取注册表数据
- c# - 如何在 Asp.net core mvc 的控制器中获取自己的用户
- c# - 如何修复 Azure Application Live Metric Stream 中没有遥测数据(例如事件、异常)?
- jenkins - Jenkins 中“阻塞”、“卡住”、“待定”、“可构建”工作之间的区别
- laravel - 我无法在 Laradock 环境中发送电子邮件
- r - 如何从列表中提取模型系数并制作图?