如何使用 laravel 5.1 上传多张图片并将其名称存储在数据库中?
How to upload multiple images and store their name in database with laravel 5.1?
我为用户创建了一个表单,可以上传多张图片,并将上传的图片移动到 'Upload' 文件夹,并将他们的名字存储在数据库中。这是我的代码
public function multiple_upload() {
$multiupload = new Multiupload();
// getting all of the post data
$files = Input::file('images');
// Making counting of uploaded images
$file_count = count($files);
// start count how many uploaded
$uploadcount = 0;
foreach($files as $file) {
$rules = array('file' => 'required'); //'required|mimes:png,gif,jpeg,txt,pdf,doc'
$validator = Validator::make(array('file'=> $file), $rules);
if($validator->passes()){
$destinationPath = 'uploads';
$filename = $file->getClientOriginalName();
$upload_success = $file->move($destinationPath, $filename);
$uploadcount ++;
$multiupload->fileimage = $filename;
$multiupload->save();
}
}
if($uploadcount == $file_count){
Session::flash('success', 'Upload successfully');
return Redirect::to('/');
}
else {
return Redirect::to('/')->withInput()->withErrors($validator);
}
}
上传所有图片后,成功移动到 'Uploads' 文件夹,但在数据库中,它只存储一个图片名称。那么如何将所有图像名称存储在数据库中呢?
请帮助我,谢谢你的帮助。
原因是您在循环中重用了同一个 Multiupload 实例,只是用下一个文件的名称覆盖了保存的名称。您应该为每个上传的文件创建一个新的 Multiupload 实例。
如@edrzej.kurylo所说
您必须将以下行添加到 foreach($files as $file) {
内部
$multiupload = new Multiupload();
因为您一次又一次地重复使用同一个 Multiupload 函数。每次循环运行时都必须重新初始化模型。
你应该移动你的$multiupload = new Multiupload();进入 foreach 循环。
foreach($files as $file) {
$multiupload = new Multiupload();
}
我会以这种方式使用 for 循环:
if($request->hasFile('images'){
$files = $request->file('images');
for($i=0; $i<count($files); $i++){
$img = new SampleImage();
$name = rand().'.'.$files[$i]->getClientOriginalExtension();
$files[$i]->move('uploads/samples/',$name);
$img->image_name = $name;
$img->save();
}
}
我为用户创建了一个表单,可以上传多张图片,并将上传的图片移动到 'Upload' 文件夹,并将他们的名字存储在数据库中。这是我的代码
public function multiple_upload() {
$multiupload = new Multiupload();
// getting all of the post data
$files = Input::file('images');
// Making counting of uploaded images
$file_count = count($files);
// start count how many uploaded
$uploadcount = 0;
foreach($files as $file) {
$rules = array('file' => 'required'); //'required|mimes:png,gif,jpeg,txt,pdf,doc'
$validator = Validator::make(array('file'=> $file), $rules);
if($validator->passes()){
$destinationPath = 'uploads';
$filename = $file->getClientOriginalName();
$upload_success = $file->move($destinationPath, $filename);
$uploadcount ++;
$multiupload->fileimage = $filename;
$multiupload->save();
}
}
if($uploadcount == $file_count){
Session::flash('success', 'Upload successfully');
return Redirect::to('/');
}
else {
return Redirect::to('/')->withInput()->withErrors($validator);
}
}
上传所有图片后,成功移动到 'Uploads' 文件夹,但在数据库中,它只存储一个图片名称。那么如何将所有图像名称存储在数据库中呢? 请帮助我,谢谢你的帮助。
原因是您在循环中重用了同一个 Multiupload 实例,只是用下一个文件的名称覆盖了保存的名称。您应该为每个上传的文件创建一个新的 Multiupload 实例。
如@edrzej.kurylo所说
您必须将以下行添加到 foreach($files as $file) {
$multiupload = new Multiupload();
因为您一次又一次地重复使用同一个 Multiupload 函数。每次循环运行时都必须重新初始化模型。
你应该移动你的$multiupload = new Multiupload();进入 foreach 循环。
foreach($files as $file) {
$multiupload = new Multiupload();
}
我会以这种方式使用 for 循环:
if($request->hasFile('images'){
$files = $request->file('images');
for($i=0; $i<count($files); $i++){
$img = new SampleImage();
$name = rand().'.'.$files[$i]->getClientOriginalExtension();
$files[$i]->move('uploads/samples/',$name);
$img->image_name = $name;
$img->save();
}
}