私はfopen()とbase64コミュニケーションについて質問があります。 シナリオは次のとおりです。私は、リソース(png/jpegまたはpdf)からURLを取得する必要があるサービスAを持っています。 B. Bサービスはこの文字列を取り、それを保存しようという名前の、別のPHPサービスへ:URLとバイトストリームにfopen
$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の機能を持っている:コードは、ということですディスク上に。サービス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);
しかし、保存されている画像が破損している、additionalsにこの画像やPDFが少ないバイトはその後、orginal持っています。 D
旧式のファイル操作ではなく、 '$ imageninary = file_get_contents($ uri);'を実行できます。これはより読みやすくなり、あなたの問題を解決する(またはしない)かもしれません。 –
ありがとう、私はすべて私のfopenを変更しますが、これは方法ではありません..他の提案? – Matte