我有一个关于fopen()和base64通信的问题。 这种情况是:我有一个服务A,必须从url中获取资源(png/jpeg或pdf)。该代码是:打开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);
现在我有发送此$回报(类似的东西:“iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAIAAAACDbGyAAAAAXNSR0IArs”)jQuery函数到另一个PHP服务,命名为B. 乙方服务利用这个字符串并尝试将其保存在磁盘上。在具体服务B试图保存在Amazon 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);
但形象,被保存已损坏,在additionals这个图片或PDF具有较少的字节,然后原单。
我真的需要帮助:d
你可以做'$ imageninary = file_get_contents($ uri);'而不是做旧式的文件操作。这将更具可读性,可能(或不可能)解决您的问题。 – 2012-01-11 14:43:32
谢谢,我改变了所有我的fopen,但这不是方式..任何其他建议? – Matte 2012-01-11 15:06:29