John Davidson

amazon s3 - Display images as jpeg in my application php from S3 bucket?

0 comments
Message:


I have a problem displaying images as jpeg in my website from S3 after deploying the application on elastic beanstalk ??


I have a php/symfony backend. I set up a route to retrieve a jpeg file from a private S3 bucket using PHP AWS SDK's function getObject().


In local environement i manage to display my images as a jpeg files from my bucket s3, no problem here.


But after deploying my app on aws ElasticBeanstalk, Then I get an object returned and my problem starts. The object I receive looks like this:


????JFIFHH??C   %# , #&')*)-0-(0%()(??C  (((((((((((((((((((((((((((((((((((((((((((((((((((????"?????? vL ???TM?? -9??pF??Zg?%K??f?r??A)??Q?_??V.?$?u/???l?3???%?X:?z??l?\??,?NqSv?,? ?,???-?k???U?Q??K7.????%??*?exp<???2@?s???t0<?zs??[????qRL???8?8gM?{k?? èh??]!?????Qm?A-Q??IV?F??j???:??3X??/M?+i??\eU??8a??h?u??%??;b?' Y??V?F*N2?z&?b??1)W????K S?c?-_??V?=5?L?W??T?sS?nx3??]+??sn?0?G9m??????+ny?+J?1?k?R?-m??????[??e|??S??-?Xo?*>?<???c??c7?-G????kJ82??i?z!??d???dVS;?]]?š?1* ?{??


Etc... the string is obviously much longer


This is my Controller.php to retrieve the jpeg images :


  /**
* Display images from s3 aws
* @Route("/test2/{nom}", name="display_image")
*/
public function getFileFromS3(AmazonS3Service $s3ClientService, $nom){
$s3 = $s3ClientService->getS3Client();
$sousRepertoire = $this->getParameter('s3SousRepImg');
$bucket = $this->getParameter('s3Bucket');
$repertoire = 'dev';
$key = trim($repertoire,"/")."/".trim($sousRepertoire,"/")."/".$nom;

$result = $s3->getObject([
'Bucket' => $bucket,
'Key' => $key
]);

$body = $result['Body'];
$type = $result['ContentType'];

$response = new Response($body);
$response->headers->set('Content-Type', $type );

return $response; // retourne un objet response contenant les données de l'image
}


And this is my twig that call the result of Controller.php, to display the jpeg images in my website :


 <a href="{{ path('display_image', {'nom':entity.image }) }}">
<img src="{{ path('display_image', {'nom':entity.image }) }}" width="70" border="0" />
</a>

It works fine in local environnement but when deploying into aws it dosent ??


I've spent so much time trying to solve this, and it seems like such an easy problem, but I just can't figure it out. I would appreciate any help.



My Answer:
It sounds like the issue may be related to how the image data is being handled or displayed in your application after retrieving it from the S3 bucket. Here are a few things you can check and try to troubleshoot the issue:

1. Make sure that the image data is being properly decoded and displayed as a jpeg file in your PHP code. You can use PHP's image functions like imagecreatefromstring() and imagejpeg() to handle the image data.

2. Check the content type of the image file that you are retrieving from the S3 bucket. Make sure that it is set to "image/jpeg" so that the browser knows how to display it.

3. Verify that the image file is not corrupted or incomplete when retrieved from the S3 bucket. You can try downloading the file manually from the S3 bucket and opening it to see if it displays correctly.

4. Check the permissions and access control settings for the S3 bucket to ensure that the PHP code running on Elastic Beanstalk has the necessary permissions to retrieve and display the image files.

5. If you are using a CDN or caching service with your S3 bucket, make sure that the image files are being served correctly and not being cached in a way that affects their display.

By checking these points and making any necessary adjustments to your code or configuration, you should be able to display images as jpeg files from your S3 bucket in your PHP application on Elastic Beanstalk.

Rate this post

3 of 5 based on 8988 votes

Comments




© 2024 Hayatsk.info - Personal Blogs Platform. All Rights Reserved.
Create blog  |  Privacy Policy  |  Terms & Conditions  |  Contact Us