Ich möchte eine Datei von einer externen URL mithilfe des PHP SDK direkt in einen Amazon S3-Bucket hochladen. Ich schaffte dies mit dem folgenden Code zu tun:Laden Sie eine externe Datei mit dem PHP SDK in den AWS S3-Bucket.
$s3 = new AmazonS3();
$response = $s3->create_object($bucket, $destination, array(
'fileUpload' => $source,
'length' => remote_filesize($source),
'contentType' => 'image/jpeg'
));
Wo die Funktion remote_filesize ist die folgende:
function remote_filesize($url) {
ob_start();
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
$ok = curl_exec($ch);
curl_close($ch);
$head = ob_get_contents();
ob_end_clean();
$regex = '/Content-Length:\s([0-9].+?)\s/';
$count = preg_match($regex, $head, $matches);
return isset($matches[1]) ? $matches[1] : "unknown";
}
Allerdings wäre es schön, wenn ich überspringen könnte die Dateigröße einstellen, wenn Amazon das Hochladen seit Das würde mir eine Reise zu meinem eigenen Server ersparen. Aber wenn ich die Eigenschaft 'length' in der $ s3-> create_object -Funktion lösche, bekomme ich eine Fehlermeldung, dass 'Die Stream-Größe für den Streaming-Upload kann nicht bestimmt werden'. Irgendwelche Ideen, wie man dieses Problem löst?
Ich habe keine Kontrolle über den Remote-Server/Host. Ich habe bereits die vorgeschlagene Methode ausprobiert, aber obwohl sie nur den Header anfordert, verlangsamte sie den Prozess erheblich. Ich habe beschlossen, meinen Server ebenfalls auf Amazon zu verschieben (in der gleichen Verfügbarkeitszone wie der Bucket), und jetzt ist es auf dem neuesten Stand. – Bjorn