Как правильно увеличить число для новых папок, в каждой по 2 файла - PullRequest
0 голосов
/ 16 января 2019

Эту логику я бы хотел иметь:

пользователь должен загрузить как минимум 2 разных файла. Он может загрузить более 2. Но следующая пара файлов должна быть сохранена в другой папке. Я не знаю, сколько файлов будет загружено. Но цель состоит в том, чтобы разбить каждую пару файлов на разные папки.

Мой код работает нормально, но создает папку # 1, сохраняет в ней 2 файла. Затем создает папку # 2 и сохраняет все следующие файлы в этой папке. Но в папке № 2 должно быть только 2 файла (как в папке № 1), следующая пара файлов должна быть сохранена в папке № 3 и т. Д., Но следующая папка не будет создана. Почему так? Мой код:

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!');

}

}

1 Ответ

0 голосов
/ 16 января 2019

Проблема с вашим кодом заключается в том, что если количество файлов в папке «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!');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...