Php 如何正确增加每个文件夹内有2个文件的新文件夹的数量
我希望有这样的逻辑: 用户必须上传至少2个不同的文件。他可以上传2个以上。但下一对文件必须保存在另一个文件夹中。我不知道会上传多少文件。但目标是将每对文件划分到不同的文件夹中 我的代码工作正常,但它创建了文件夹#1,在其中保存了2个文件。然后创建文件夹#2并将所有后续文件保存在此文件夹中。但在文件夹#2中必须只有2个文件(如在文件夹#1中),下一对文件必须保存在文件夹#3中,依此类推,但不会创建下一个文件夹。为什么会这样?我的代码:Php 如何正确增加每个文件夹内有2个文件的新文件夹的数量,php,laravel,file-upload,logic,Php,Laravel,File Upload,Logic,我希望有这样的逻辑: 用户必须上传至少2个不同的文件。他可以上传2个以上。但下一对文件必须保存在另一个文件夹中。我不知道会上传多少文件。但目标是将每对文件划分到不同的文件夹中 我的代码工作正常,但它创建了文件夹#1,在其中保存了2个文件。然后创建文件夹#2并将所有后续文件保存在此文件夹中。但在文件夹#2中必须只有2个文件(如在文件夹#1中),下一对文件必须保存在文件夹#3中,依此类推,但不会创建下一个文件夹。为什么会这样?我的代码: class UploadController extends
class UploadController extends Controller
{
private $folderId;
public function __construct()
{
$this->folderId = 1;
}
/**
* File Upload.
*
* @param Request $request
* @return
*/
public function store(Request $request)
{
$path = 'public/' . $this->folderId;
$files = Storage::files($path);
$filesSum = count($files);
if ($filesSum <= 1) {
$request->file('file')->storeAs($path, $request->file('file')->getClientOriginalName());
} else {
$path = 'public/' . ($this->folderId + 1) ;
$request->file('file')->storeAs($path, $request->file('file')->getClientOriginalName());
}
return redirect()->back()->with('message', 'File has been uploaded!');
}
类UploadController扩展控制器
{
私人$folderId;
公共函数构造()
{
$this->folderId=1;
}
/**
*文件上传。
*
*@param Request$Request
*@返回
*/
公共函数存储(请求$Request)
{
$path='public/。$this->folderId;
$files=存储::文件($path);
$filesSum=count($files);
如果($filesum file('file')->storeAs($path,$request->file('file')->getClientOriginalName());
}否则{
$path='public/。($this->folderId+1);
$request->file('file')->storeAs($path,$request->file('file')->getClientOriginalName());
}
return redirect()->back()->带有('message','File has upload!');
}
}代码的问题是,如果文件夹“1”中的文件计数大于1,则它总是上载到文件夹“2”和
folderId
中,在上载更多文件时永远不会增加。您需要检查上载的文件以确定folderId
。将代码修改为
/**
* File Upload.
*
* @param Request $request
* @return
*/
public function store(Request $request)
{
$uploaded_files = array_filter(Storage::allFiles('public'), function($file){
// ignore the .gitgnore from the upoloaded list. You can improve this.
return strpos($file, '.gitignore') === false;
});
$uploaded_files_count = count($uploaded_files);
// intdiv() is supported from php7
$folderId = intdiv($uploaded_files_count, 2) + 1;
$path = 'public/' . $folderId;
$files = Storage::files($path);
$filesSum = count($files);
if ($filesSum <= 1) {
$request->file('file')->storeAs($path, $request->file('file')->getClientOriginalName());
} else {
$path = 'public/' . ($folderId + 1) ;
$request->file('file')->storeAs($path, $request->file('file')->getClientOriginalName());
}
return redirect()->back()->with('message', 'File has been uploaded!');
}
/**
*文件上传。
*
*@param Request$Request
*@返回
*/
公共函数存储(请求$Request)
{
$uploaded_files=数组_过滤器(存储::所有文件('public'),函数($file){
//忽略upoloaded列表中的.gitnore。您可以对此进行改进。
返回strpos($file,'.gitignore')==false;
});
$Upload_files_count=计数($Upload_files);
//php7支持intdiv()
$folderId=intdiv($upload\u files\u count,2)+1;
$path='public/'。$folderId;
$files=存储::文件($path);
$filesSum=count($files);
如果($filesum file('file')->storeAs($path,$request->file('file')->getClientOriginalName());
}否则{
$path='public/'。($folderId+1);
$request->file('file')->storeAs($path,$request->file('file')->getClientOriginalName());
}
return redirect()->back()->带有('message','File has upload!');
}
为什么要向下投票?在每个请求中,您发送了多少个文件?对于后续调用,您似乎没有增加$this->folderId
。您每次都添加1到1。如果您将$this->folderId+1
更改为+$this->folderId
,是否有效?用户在每个请求中发送1个文件。++$this->folderId这不是吗它还创建了第一个文件夹,放入2个文件。然后创建了第二个文件夹,放入2个文件,并继续将下一个文件放入文件夹#2银行,Iljas,这完全正确!!:)请向我投票,获得你的答案!