2012-05-08 16 views
14

È possibile caricare un file su S3 da un server remoto?Come caricare i file direttamente su Amazon S3 da un server remoto?

Il server remoto è fondamentalmente un file server basato su URL. Esempio, usando http://example.com/1.jpg, serve l'immagine. Non fa nient'altro e non può eseguire codice su questo server.

E 'possibile avere un altro server dicendo S3 per caricare un file da http://example.com/1.jpg

  upload from http://example.com/1.jpg 
server -------------------------------------------> S3 <-----> example.com 

risposta

19

Se non è possibile eseguire codice sul server o eseguire le richieste allora, no, non si può fare questo. Dovrai scaricare il file su un server o computer che possiedi e caricare da lì.

Potete vedere le operazioni che è possibile eseguire su Amazon S3 a http://docs.amazonwebservices.com/AmazonS3/latest/API/APIRest.html

Controllo delle operazioni sia per il resto e SOAP API vedrete che non c'è modo di dare Amazon S3 un URL remoto e averlo afferrare il oggetto per te. Tutte le richieste PUT richiedono che i dati dell'oggetto siano forniti come parte della richiesta. Significa che il server o il computer che sta iniziando la richiesta web deve avere i dati.

Ho avuto un problema simile in passato in cui volevo scaricare le miniature di Facebook dei miei utenti e caricarle su S3 per l'utilizzo sul mio sito. Il modo in cui l'ho fatto è stato scaricare l'immagine da Facebook nella memoria sul mio server, quindi caricare su Amazon S3 - la cosa completa è durato meno di 2 secondi. Al termine del caricamento su S3, scrivere il bucket/chiave in un database.

Purtroppo non c'è altro modo per farlo.

-1

è possibile utilizzare il comando scp da Terminale.

1) con il morsetto, andare verso il luogo dove si trova il file che si desidera trasferire al server

2) digitare questo:

scp -i yourAmazonKeypairPath.pem fileNameThatYouWantToTransfer.php [email protected]: 

N.B. Aggiungi "ec2-user @" prima dei tuoi oggetti ec2blablbla che hai ricevuto dal sito Web di Ec2 !! Questo è un errore pignolo!

3) il file verrà caricato e verranno visualizzati i progressi. Quando è al 100%, hai finito!

+0

Perché qualcuno dovrebbe votare questo? Puoi spiegare? Questo funziona per me! – coolcool1994

+4

Votato perché questo post richiede specificamente S3 e S3 non è un'istanza ec2 normale, quindi non sta eseguendo un server SSH. È necessario utilizzare un protocollo HTTP per parlare con esso. – mianos

+0

Suppongo che potresti attivare un'istanza EC2, usarla per eseguire la copia remota (server -> EC2 -> S3) quindi distruggere nuovamente l'istanza EC2. – Malvineous

1

Penso che il suggerimento fornito sia abbastanza buono, puoi SCP il file su S3 Bucket. Dando il file pem sarà una password meno autenticazione, tramite il file PHP è possibile convalidare le estensioni. Il file PHP può passare il file, come argomento al comando SCP.

L'unico problema con questa soluzione è che è necessario disporre della propria istanza in AWS. Non è possibile utilizzare questa soluzione se il proprio sito Web è ospitato in altri provider di hosting e si sta tentando di caricare file direttamente su S3 Bucket.

1

Tecnicamente è possibile, using AWS Signature Version 4, supponendo che il remote server è il cliente nell'immagine qui sotto, si può preparare un modulo nel server principale, e inviare i campi del modulo al server remoto, per la sua curl esso. Esempio dettagliato here.

Amazon S3 upload using a POST request

Problemi correlati