У меня есть вопрос о fopen() и base64 связи. Сценарий таков: у меня есть служба A, которая должна извлекать из url ресурс (png/jpeg или pdf). Код является то, что:fopen на url и bytestream
$uri = urldecode($_POST['uri']);
$imgfile = $uri;
$handle = fopen($uri, 'r');
$imagebinary = '';
while (!feof($handle)) {
$c = fgetc($handle);
if($c === false) break;
$imagebinary .= $c;
}
fclose($handle);
$return = base64_encode($imagebinary);
Теперь у меня есть функция JQuery, отправляющая это $ возвращения (что-то вроде этого: «iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAIAAAACDbGyAAAAAXNSR0IArs») в другой PHP службу, названный Б. B сервиса взять эту строку и попытаться сохранить его на диске. В конкретных услуга В попытке сохранить файл на Амазонке s3, код является то, что:
// in $imagedata is saved the string generated by service A
$imagedata = $_POST['serviceA_base64encodedfile'];
// $contentType taken from switch function on $ext
// for example 'image/png'
$filename = sha1(uniqid()) . '.' . $ext;
$full_filename = $path . '/' . $filename;
$stream = fopen('data://' . $contentType . ';base64,' . $imagedata, 'r');
fseek($stream, 0);
$opt = array(
'fileUpload' => $stream,
'acl' => AmazonS3::ACL_PUBLIC,
'contentType' => $contentType
);
$s3 = new AmazonS3(AWS_KEY, AWS_SECRET_KEY);
$response = $s3->create_object($bucket, $filename, $opt);
Но образ, который спасаемых поврежден, в это изображения Вспомогательные или PDF имеют меньше байт, то оригинал.
мне нужна помощь НАСТОЯЩЕМУ: D
Вы можете сделать '$ imageninary = file_get_contents ($ uri);' вместо выполнения файлов старой школы. Это будет более читаемым и может (или не может) решить вашу проблему. –
спасибо, я меняю все свои fopen, но это не так .. любые другие предложения? – Matte