Запрос гудла навсегда зависает после загрузки большого файла - PullRequest
0 голосов
/ 20 февраля 2020

Я хотел бы загрузить файл на сервер Mapbox с помощью Guzzle:

https://docs.mapbox.com/api/maps/#create -a-tileset-source

Когда размер файла меньше затем ~ 250 МБ Я получаю ответ сервера о загрузке файла успешно. Интересно, что с большими файлами он никогда не выдает никакой ошибки, просто висит навсегда без какого-либо ответа.

Я могу подтвердить, что загрузка файла прошла успешно, потому что я добавил функцию обратного вызова progress, которая записывает файл на сервер и я вижу, что $uploadedBytes медленно увеличивается до $uploadedBytes === $uploadTotal. Таким образом, процесс загрузки проходит.

С меньшим файлом все работает отлично.

Если я запускаю точно такой же запрос с помощью curl из командной строки, все работает как исключение, я Получение ответа сервера о загрузке файла прошло успешно, независимо от его размера.

Как воспроизвести

            $response = $this->post('/tilesets/v1/sources/'.$username.'/'.$id,[],[
                'debug' => true,
                'multipart' => [
                    [
                        'name'     => 'file',
                        //'contents' => Storage::disk('geojson-files')->get($src_file),
                        'contents' => fopen($src_file, 'r'),
                        //'contents' => '@'.$src_file,
                        //'contents' => file_get_contents($src_file),
                        'filename' => 'file.geojson'
                    ]
                ],
                'progress' => function(
                    $downloadTotal,
                    $downloadedBytes,
                    $uploadTotal,
                    $uploadedBytes
                ) {
                   $fs = fopen('/tmp/progress','w');
                   if($uploadTotal && $uploadedBytes)
                    fputs($fs,$uploadedBytes.'/'.$uploadTotal);
                },
            ]);

Тот же запрос от работает командная строка:

curl -X POST "https://api.mapbox.com/tilesets/v1/sources/cveley/locations-src?access_token=TOKEN" -F file=@/tmp/locations-map.ld --header "Content-Type: multipart/form-data"

Версия (-и) Guzzle затронута : ^ 6.3

PHP версия : 7.3.13

версия cURL : 7.58.0

...