Используйте файл s3 для загрузки multipart/form-data с помощью Guzzle PHP

Я пытаюсь взять файл, размещенный на Amazon S3, и загрузить его на другой сервер, используя почтовый запрос Content-Type: multipart/form-data. Я могу использовать для этого Curl --form, но я не уверен, как заставить файл S3 вести себя как локальный файл, чтобы я мог сделать что-то подобное.

curl -F "file=@localfile;filename=nameinpost" url.com

У меня настроен жор, так что я могу использовать оболочку потока, как это

$this->guzzleClient->registerStreamWrapper(); $data = file_get_contents('s3://buck/test-file.jpg');

Если я смогу заставить этот поток работать, это будет здорово, или можно использовать только локальный файл? Каков наиболее оптимизированный способ сделать такого рода вещи?


person Mike    schedule 07.05.2014    source источник


Ответы (2)



Я придумал что-то вроде этого.

//...configure an s3client
$this->s3client->registerStreamWrapper();

$filename = sys_get_temp_dir() .'/'. $unique_name;
$handle = fopen($filename, 'w+');
$bytes_written = fwrite( $handle, file_get_contents('s3://bucket/test-file.jpg'));

//...configure a Guzzle client

//Guzzle 3.0
$request = $this->client->post('image')->addPostFile('images', $filename);
$response = $request->send();

//Guzzle 4.0
$request = $this->client->createRequest('POST', 'images');
$request->getBody()->addFile(new PostFile('image', $handle));
$response = $this->client->send($request);

//remove the file
unlink($filename);

Guzzle 4.0 также имеет несколько новых функций, позволяющих использовать потоки напрямую, без необходимости создавать этот временный файл. Однако мне не удалось заставить это работать со службой, которая ожидала загрузки файла на основе формы после http://www.faqs.org/rfcs/rfc1867.html. Если есть возможность использовать стрим, было бы еще лучше!

Дополнительные сведения см. в разделе «Улучшенная поддержка файлов POST» здесь http://mtdowling.com/blog/2014/03/15/guzzle-4-rc, переход с версии 3 на 4 вызвал у меня некоторое замешательство. Убедитесь, что вы знаете, какая версия у ваших клиентов, и что вы читаете документы для этой версии :)

person Mike    schedule 11.05.2014