Desidero caricare un file da un URL esterno direttamente su un bucket Amazon S3 utilizzando l'SDK PHP. Sono riuscito a farlo con il seguente codice:Carica file esterno nel bucket AWS S3 utilizzando PHP SDK
$s3 = new AmazonS3();
$response = $s3->create_object($bucket, $destination, array(
'fileUpload' => $source,
'length' => remote_filesize($source),
'contentType' => 'image/jpeg'
));
Dove la funzione remote_filesize è la seguente:
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";
}
Tuttavia, sarebbe bello se potessi saltare l'impostazione della dimensione del file durante il caricamento di Amazon dal questo mi farebbe risparmiare un viaggio sul mio server. Ma se rimuovo l'impostazione della proprietà 'length' nella funzione $ s3-> create_object, viene visualizzato un errore che dice che 'La dimensione del flusso per il caricamento in streaming non può essere determinata'. Qualche idea su come risolvere questo problema?
Non ho controllo sul server/host remoto. Ho già provato il metodo suggerito, ma anche se richiede solo l'intestazione, ha rallentato notevolmente il processo. Ho deciso di spostare anche il mio server su Amazon (nella stessa zona di disponibilità del bucket) e ora è pronto per la velocità. – Bjorn