Io non sono a conoscenza di come funziona S3, quindi non so se questa soluzione è possibile. Ma non potresti semplicemente reindirizzare il browser dell'utente al file? Se ho capito bene, S3 ti consente di creare URL web per tutti i file nel tuo bucket. Quindi, se, ad esempio, si tratta di download a pagamento, è possibile utilizzare have S3 generate a temporary URL for that download e quindi rimuoverlo una volta che l'utente lo ha scaricato.
Se questo non è un'opzione, è possibile provare queste classi PHP:
- HTTP protocol client - Una classe che implementa le richieste a risorse HTTP (usata dal flusso involucro sotto). Permette alle richieste di essere trasmesse in streaming.
- gHttp - Un involucro flusso HTTP che permette di trattare le risorse HTTP remote come file, usando le funzioni come
fopen()
, fread()
, ecc
- Amazon S3 Stream Wrapper - Un flusso di Amazon S3 involucro dallo sviluppatore stesso come gHttp. Consente inoltre di accedere alle risorse remote come file ordinari tramite
fopen('s3://...')
.
Edit:
This page ha informazioni su come "pre-autenticazione" una richiesta codificando la chiave di autenticazione nell'URL. È sotto la sezione intitolata: Alternativa all'autenticazione richiesta stringa di query.
// I'm only implementing the parts required for GET requests.
// POST uploads will require additional components.
function getStringToSign($req, $expires, $uri) {
return "$req\n\n\n$expires\n$uri";
}
function encodeSignature($sig, $key) {
$sig = utf8_encode($sig);
$sig = hash_hmac('sha1', $sig, $key);
$sig = base64_encode($sig);
return urlencode($sig);
}
$expires = strtotime('+1 hour');
$stringToSign = getStringToSign('GET', $expires, $uri);
$signature = encodeSignature($stringToSign, $awsKey);
$url .= '?AWSAccessKeyId='.$awsKeyId
.'&Expires='.$expires
.'&Signature='.$signature;
Poi basta reindirizzare l'utente a $url
, e dovrebbero essere in grado di scaricare il file. La firma è codificata da uno schema di crittografia unidirezionale (sha1), quindi non c'è alcun rischio che la chiave di accesso segreto AWS venga scoperta.
L'unica preoccupazione che avrei con il reindirizzamento è che è necessario verificare che la sicurezza non sia passata. Se il reindirizzamento richiede l'autorizzazione, lo dai al cliente. – Joe
Bene, ecco perché viene generato un URL pubblico temporaneo. In questo modo non vengono trasmesse informazioni di autenticazione e l'URL scompare non appena l'utente ha ricevuto il file (o dopo un certo limite di tempo). – Calvin
Non penso che questo risolva il mio rischio di ridenominazione. Se sposto due file in una cartella pubblica per consentire il download direttamente, dovrei dare loro dei nomi amichevoli lì. È possibile che abbiano lo stesso nome, e poi sono bloccato. – Corey