Строго говоря, Square API документации, их метод может быть реализован с учетом нескольких вещей.
- Ваш запрос должен быть заключен в границу и содержать размещение, имя, имя файла, тип контента, например, образец ниже.
--BOUNDARY
Content-Disposition: form-data; name="image_data"; filename="MyImage.png"
Content-Type: image/png
{BLANK LINE IS REQUIRED}
IMAGE BINARY DATA GOES HERE
--BOUNDARY--
По сути, формат запроса должен быть точно таким, как указано в образце. Это включает в себя «границу», символы новой строки, необходимые заголовки, пустую строку между заголовками (по какой-то причине ничего не работает, если строка отсутствует) и фактические двоичные данные изображения. ПРИМЕЧАНИЕ. Границей может быть любая строка, которую вы выберете, но ее необходимо использовать последовательно. В коде, это будет выглядеть примерно так:
$boundary = "---------------------" . md5(mt_rand() . microtime());
$imageToUpload = "--{$boundary}" . "\r\n" .
"Content-Disposition: form-data; name=\"image_data\"; filename=\"" . $full_path_to_image_file . "\"" . "\r\n" .
"Content-Type: image/jpeg" . "\r\n" .
"\r\n" . // <- empty line is required
(file_get_contents($full_path_to_image_file)) . "\r\n" .
"--{$boundary}--";
выше будет производить запрос, который выглядит следующим образом:
-----------------------51b62743876b1201aee47ff4b1910e49
Content-Disposition: form-data; name="image_data"; filename="/some/directory/image.jpg"
Content-Type: image/jpeg
����
-----------------------51b62743876b1201aee47ff4b1910e49--
- Технически говоря, Content-Type в запросе необходимо изменить с тип загружаемого изображения (изображение/jpeg или изображение/png). Вы можете установить тип контента в application/octet-stream, чтобы охватить все основы.
-----------------------51b62743876b1201aee47ff4b1910e49
Content-Disposition: form-data; name="image_data"; filename="/some/directory/image.jpg"
Content-Type: application/octet-stream
����
-----------------------51b62743876b1201aee47ff4b1910e49--
Приведенные выше примеры загружат изображение.
- «Бинарные данные изображения» могут вводить в заблуждение, так как каждый мой поиск показал, что двоичный файл изображения получается с помощью функции base64_encode. В моих экспериментах base64_encoding ничего не делает. Вам нужно только открыть файл с файлом_get_contents.
- В запросе cURL должен быть установлен тип содержимого заголовка для multipart/form-data и иметь ту же границу, что и запрос. Пример ниже:
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $personalAccessToken, 'Content-Type: multipart/form-data; boundary=' . $boundary));
Таким образом, это добавляет еще одно решение для смеси.
Спасибо @Troy .. он работает очень хорошо ... спасибо много ... я думаю, что они должны привести этот пример в документацию – user1272589
К сожалению, в настоящее время мы не имеем образцы кода для разных языков, но я всегда рад помочь, когда смогу. У меня на самом деле было это удобно, потому что по какой-то причине у людей обычно возникают проблемы с загрузкой изображений. – Troy