2016-06-27 73 views
9

La mia applicazione carica le immagini su s3. Uso il rendering front-end per ottenere i colori dell'immagine, ma poiché il caricamento su s3 riduce la qualità (jpeg'ish), ottengo più colori che desidero.Caricamento su S3 da Laravel Qualità persa

enter image description here

$s3 = \Storage::disk('s3'); 
$s3->put('/images/file.jpg', '/images/file.jpg', 'public'); 

C'è modo per evitare questa perdita di qualità? Ho notato che se caricavo il file direttamente usando il sito web della console aws, la qualità rimane la stessa che è l'ideale.

Grazie!

+0

Come hai provato/convalidato questa apparente perdita di qualità? Per quanto ho capito, i file non avranno questa perdita di qualità di default. – alariva

+8

S3 non ha alcun meccanismo che possa alterare il carico utile di un oggetto caricato in alcun modo. Qualunque cosa stia succedendo qui può essere solo esterna a S3. –

+3

Anche 'put' di Laravel non lo farà. Qualcos'altro sta succedendo. – ceejayoz

risposta

4

Nel controllore Azione

public function uploadFileToS3(Request $request) 
{ 
    $image = $request->file('image'); 
} 

Poi abbiamo bisogno di assegnare un nome di file per il file.You caricato potrebbe lasciare questo come il nome del file originale, ma nella maggior parte dei casi si consiglia di cambiarlo mantenere le cose coerenti. Passiamo a un timestamp e aggiungiamo l'estensione del file ad esso.

$imageFileName = time() . '.' . $image->getClientOriginalExtension(); 

ora ottenere il contenuto dell'immagine come segue

$s3 = \Storage::disk('s3'); 
$filePath = '/images/file.jpg' . $imageFileName; 
$s3->put($filePath, file_get_contents($image), 'public'); 

Per ulteriori informazioni è possibile fare riferimento this

1

non ho familiarità con laravel ma io sono familiarità con AWS S3, e io sono utilizzando aws-sdk-php.
Per quanto ne so, né AWS S3 né php-sdk non fanno qualcosa implicitamente sotto il cofano. Quindi deve essere qualcosa che non va nel tuo progetto.
Si può provare utilizzare pianura AWS-sdk-php:

$s3 = S3Client::factory([ 
    'region'  => 'us-west-2', 
    'credentials' => $credentials, 
    'version'  => 'latest', 
]); 
$s3->putObject([ 
    'Bucket'  => 'myBucket', 
    'Key'  => 'test/img.jpg', 
    'SourceFile' => '/tmp/img.jpg', 
]); 

Funziona perfettamente.