Laravel 5.5 - 多张图片上传
Laravel 5.5 - multiple images upload
我的控制器中有这个功能:
use File;
use Image; //image intervention library
...
public function upload(Request $request)
{
//make sure there is a folder in public with the username
$username = Auth::user()->name;
$folderpath = public_path('images/' . $username . '/');
File::makeDirectory($folderpath, $mode = 0777, true, true);
$files = $request->file;
if(!empty($files)):
foreach($files as $file):
$filename = 'post_' . time() . '.' . $file->getClientOriginalExtension();
$path = $folderpath . $filename;
Image::make($file)->resize(800,400)->save($path);
endforeach;
endif;
return 'success';
}
如果我上传多张图片,只保存最后一张图片。
我试过了:
public function upload(Request $request)
{
//make sure there is a folder in public with the username
$username = Auth::user()->name;
$folderpath = public_path('images/' . $username . '/');
File::makeDirectory($folderpath, $mode = 0777, true, true);
$files = $request->file;
if(!empty($files)):
foreach($files as $file):
$filename = 'post_' . time() . '.' . $file->getClientOriginalExtension();
$path = $folderpath . $filename;
$file->save($path);
endforeach;
endif;
return ''success;
}
这让我出错:
Method save does not exist.
我目瞪口呆,好像我没有用模型实例化它。但是这种情况下,如果只是直接文件上传,如何用model实例化呢?
在 laravel
中上传多张图片的最佳方式是什么?
更新
阅读@kunal 的回答后,我设法通过为文件名添加唯一编号来解决问题:
public function upload(Request $request)
{
//make sure there is a folder in public with the username
$username = Auth::user()->name;
$folderpath = public_path('images/' . $username . '/');
File::makeDirectory($folderpath, $mode = 0777, true, true);
$files = $request->file;
$count = 0;//<-- add a counter
if(!empty($files)):
foreach($files as $file):
$filename = 'post_' . time() . '_' . $count . '.' . $file->getClientOriginalExtension();//<-- add counter to the file name
$path = $folderpath . $filename;
Image::make($file)->resize(800,400)->save($path);
$count ++;//<-- increase the value
endforeach;
endif;
return 'success';
}
我想你可能错过了这部分
<input type="file" id="gallery" name="file[]" />
注意 file[]
必须是数组否则会 only save the last image if upload multiple image
如果你的 html 部分是正确的,那么就这样使用,
foreach ($file as $photo) {
$path = Storage::putFile('foldername', $photo);
}
试试这个代码:
$files= Input::file('image');
$destinationPath= 'images';
$images=array();
foreach($files as $file){
$fullname= $file->getClientOriginalName();
$hashname = $fullname;
$upload_success =$file->move($destinationPath, $hashname);
$images[]=$fullname;
$has= implode(",",$images);
}
$modelname= new Modelname;
$modelname->image_attachment = $has;
$modelname->save();
你 html 页面:
<input type="file" id="image" name="image[]" />
可能您正在寻找这种东西:-
if ($request->hasFile('files')) {
$files = $request->file('files');
foreach($files as $file){
$extension = $file->getClientOriginalExtension();
$fileName = str_random(5)."-".date('his')."-".str_random(3).".".$extension;
$folderpath = 'images'.'/';
$file->move($folderpath , $fileName);
}
}
<input type="file" id="gallery" name="files[]" multiple />
没那么复杂。
从 larval 5.8 开始,你可以这样做:
collect($request->images)->each(function ($image) {
return $image->store('images', 'public');
});
它将图像放在 public 磁盘的图像文件夹中。
我的控制器中有这个功能:
use File;
use Image; //image intervention library
...
public function upload(Request $request)
{
//make sure there is a folder in public with the username
$username = Auth::user()->name;
$folderpath = public_path('images/' . $username . '/');
File::makeDirectory($folderpath, $mode = 0777, true, true);
$files = $request->file;
if(!empty($files)):
foreach($files as $file):
$filename = 'post_' . time() . '.' . $file->getClientOriginalExtension();
$path = $folderpath . $filename;
Image::make($file)->resize(800,400)->save($path);
endforeach;
endif;
return 'success';
}
如果我上传多张图片,只保存最后一张图片。
我试过了:
public function upload(Request $request)
{
//make sure there is a folder in public with the username
$username = Auth::user()->name;
$folderpath = public_path('images/' . $username . '/');
File::makeDirectory($folderpath, $mode = 0777, true, true);
$files = $request->file;
if(!empty($files)):
foreach($files as $file):
$filename = 'post_' . time() . '.' . $file->getClientOriginalExtension();
$path = $folderpath . $filename;
$file->save($path);
endforeach;
endif;
return ''success;
}
这让我出错:
Method save does not exist.
我目瞪口呆,好像我没有用模型实例化它。但是这种情况下,如果只是直接文件上传,如何用model实例化呢?
在 laravel
中上传多张图片的最佳方式是什么?
更新
阅读@kunal 的回答后,我设法通过为文件名添加唯一编号来解决问题:
public function upload(Request $request)
{
//make sure there is a folder in public with the username
$username = Auth::user()->name;
$folderpath = public_path('images/' . $username . '/');
File::makeDirectory($folderpath, $mode = 0777, true, true);
$files = $request->file;
$count = 0;//<-- add a counter
if(!empty($files)):
foreach($files as $file):
$filename = 'post_' . time() . '_' . $count . '.' . $file->getClientOriginalExtension();//<-- add counter to the file name
$path = $folderpath . $filename;
Image::make($file)->resize(800,400)->save($path);
$count ++;//<-- increase the value
endforeach;
endif;
return 'success';
}
我想你可能错过了这部分
<input type="file" id="gallery" name="file[]" />
注意 file[]
必须是数组否则会 only save the last image if upload multiple image
如果你的 html 部分是正确的,那么就这样使用,
foreach ($file as $photo) {
$path = Storage::putFile('foldername', $photo);
}
试试这个代码:
$files= Input::file('image');
$destinationPath= 'images';
$images=array();
foreach($files as $file){
$fullname= $file->getClientOriginalName();
$hashname = $fullname;
$upload_success =$file->move($destinationPath, $hashname);
$images[]=$fullname;
$has= implode(",",$images);
}
$modelname= new Modelname;
$modelname->image_attachment = $has;
$modelname->save();
你 html 页面:
<input type="file" id="image" name="image[]" />
可能您正在寻找这种东西:-
if ($request->hasFile('files')) {
$files = $request->file('files');
foreach($files as $file){
$extension = $file->getClientOriginalExtension();
$fileName = str_random(5)."-".date('his')."-".str_random(3).".".$extension;
$folderpath = 'images'.'/';
$file->move($folderpath , $fileName);
}
}
<input type="file" id="gallery" name="files[]" multiple />
没那么复杂。 从 larval 5.8 开始,你可以这样做:
collect($request->images)->each(function ($image) {
return $image->store('images', 'public');
});
它将图像放在 public 磁盘的图像文件夹中。