Я хотел бы загрузить файл на сервер 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