На самом деле, версии стандарта C ++ до того, как C ++ 11 определили ключевое слово «export», [] , можно просто объявить шаблоны в файле заголовка и реализовать их в другом месте.
К сожалению, ни один из популярных компиляторов не реализовал это ключевое слово. Единственный, о котором я знаю, - это интерфейс, написанный Edison Design Group, который используется компилятором Comeau C ++. Все остальные настаивали на том, что вы пишете шаблоны в заголовочных файлах, нуждающихся в определении кода для надлежащего создания экземпляра (как уже указывали другие).
В результате стандартная комиссия ISO C ++ решила удалить export
особенность шаблонов, начинающихся с C ++ 11.
Проблема с вашим кодом заключается в том, что если число файлов в папке «1» больше 1, оно всегда загружается в папку «2» & amp; 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!');
}