Symfony Post API занимает слишком много времени для загрузки - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть API, который будет загружать изображения пользователей на сервер.

Он будет принимать изображения в формате base64 и отправлять их на сервер.Но проблема в том, что для некоторых пользователей это займет много времени, а для некоторых пользователей это работает хорошо.

Я не понимаю, почему это происходит.Но каталог назначения содержит 700 ГБ данных.

код для загрузки: `$ файл будет иметь формат base64 изображения $ this-> file = $ file;

    if ($this->id && !empty($this->path) && !is_null($file)) {
        $this->storeFilenameForRemove();
    }

    if ($file instanceof File) {

        if (isset($this->path)) {
            $this->temp = $this->path;
            $this->path = null;
        } else {
            $this->path = 'initial';
        }
    } else if (gettype($file) == 'string') {

        if (preg_match('/data:(\w+)\/(\w+);base64,/i', $file, $matches)) {

            if ($matches) {

                $file = preg_replace('/data:(\w+)\/(\w+);base64,/i', '', $file);

                $tmpFile = Array();
                $tmpFile['data'] = base64_decode( str_replace(' ', '+', $file) );

                if ($matches[1] === 'image') {

                    $tmpFile['name'] = uniqid().'.png';
                } else {

                    $tmpFile['name'] = uniqid().'.'.$matches[2];
                }

                $tmpFile['handle'] = fopen( $this->getUploadRootDir().'/'.$tmpFile['name'], 'w' );

                // inject the raw image data into the new file
                fwrite( $tmpFile['handle'], $tmpFile['data'] );
                fclose( $tmpFile['handle'] );

                $this->path = $tmpFile['name'];
            }
        }
    } else {

        $this->file = $file;
    }`

1 Ответ

0 голосов
/ 30 ноября 2018

Я не уверен, что выполнение preg_match для строки в кодировке base64 - хорошая идея, хотя я не уверен, что это решит все ваши проблемы, связанные со скоростью, я уверен, что реализация другой проверки для строк в кодировке base64улучшить скорость.

Заменить следующее:

if (preg_match('/data:(\w+)\/(\w+);base64,/i', $file, $matches)) {

этим

if ( base64_encode(base64_decode($file)) === $file){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...